计算机系统应用教程网站

网站首页 > 技术文章 正文

RabbitMQ 流概述 rabbitmq原理和架构

btikc 2024-10-02 12:20:55 技术文章 12 ℃ 0 评论

更多互联网新鲜资讯、工作奇淫技巧关注【飞鱼在浪屿】(日更新)

RabbitMQ 3.9 引入了一种新型数据结构:。Streams 解锁了一组用例,使用“传统”队列实现这些用例可能很乏味。让我们在这篇文章中发现流如何扩展 RabbitMQ 的功能。


什么是 RabbitMQ 流

RabbitMQ 流使用非破坏性消费语义对附加日志进行处理。这意味着——与 RabbitMQ 中的传统队列不同的是——从流中消费不会删除消息。

RabbitMQ 中的流是持久化和复制的。这是数据安全性和高可用性(在节点丢失的情况下),以及课扩展(从不同节点读取相同的流)。

与非常通用的队列相比,流看起来有点固执己见,但它们在一组用例中派上用场。它们以一种非常好的方式扩展了 RabbitMQ 的功能。


流有什么用

RabbitMQ Streams 在以下用例中大放异彩:

  • 大输出:许多应用程序需要读取相同的消息(对于传统队列,这将需要为每个应用程序声明一个队列并将相同消息的副本传递给每个应用程序)
  • 大积压:流将消息存储在磁盘上,而不是内存中,因此唯一的限制是磁盘容量
  • 重放和时间旅行:消费者可以使用绝对偏移量或时间戳附加流中的任何位置,并且他们可以读取和重新读取相同的数据
  • 高吞吐量:与传统队列相比,流速度超快,快几个数量级

流作为RabbitMQ 3.9 中的核心插件发布,可以将它们与所有现有的 RabbitMQ 功能一起使用。


RabbitMQ Streams 的简而言之

让我们更具体地了解流:

  • 因为发布者确认和发布者端的消息重复数据删除机制,流提供至少一次语义保证。
  • 流支持服务器端偏移跟踪,让消费者从他们离开的地方重新开始。
  • 由于流具有非破坏性语义,因此它们可以增长很多。RabbitMQ Streams 可以根据保留策略,基于大小或年龄自动截断流。
  • 流可以通过专用的、极快的二进制协议和 AMQP 0.9.1 & 1.0(快速)访问。
  • 由于RabbitMQ 3.9 的核心发行版中附带的流插件,流协议是可访问的。
  • RabbitMQ Streams 支持客户端-服务器 TLS。
  • 可以使用现代的、高度优化的Java 客户端。它使用流协议以获得更好的性能。它是完整的文档。
  • 有一个可用的客户端。
  • 还有一个基于Java客户端的性能工具。是的,它以Docker 镜像的形式出现。

事不宜迟,让我们让这件事运行起来。


Docker 快速入门

使用 Docker 可以很容易地执行流。让我们确保您还没有我们将要在本地使用的 Docker 镜像:

docker rmi rabbitmq:3.9-rc pivotalrabbitmq/stream-perf-test

如果镜像不在计算机上,您将收到一条错误消息,但这很好。

现在让我们为我们的服务器和性能工具容器创建一个网络来进行通信:

docker network create rabbitmq-streams

是时候启动代理了:

docker run -it --rm --network rabbitmq-streams --name rabbitmq \
    -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS='-rabbit loopback_users "none"' \
    rabbitmq:3.9-rc

代理应该在几秒钟内启动。准备就绪后,启用流插件:

docker exec rabbitmq rabbitmq-plugins enable rabbitmq_stream

现在启动性能工具。它将创建一个流,并尽可能快地发布和消费:

docker run -it --rm --network rabbitmq-streams pivotalrabbitmq/stream-perf-test \
    --uris rabbitmq-stream://rabbitmq:5552

您可以让性能工具运行一段时间,然后使用命令Ctrl+C停止它:

19, published 1180489 msg/s, confirmed 1180145 msg/s, consumed 1180648 msg/s, \
    latency min/median/75th/95th/99th 1537/7819/9631/12136/14425 μs, chunk size 2639
20, published 1181929 msg/s, confirmed 1181597 msg/s, consumed 1182074 msg/s, \
    latency min/median/75th/95th/99th 1537/7838/9562/11967/14355 μs, chunk size 2657
^C
Summary: published 1205835 msg/s, confirmed 1205435 msg/s, consumed 1205477 msg/s, latency 95th 12158 μs, chunk size 2654

这些是常规 Linux 工作站上的数字结果,您将获得什么样的数字取决于您自己的设置。macOS 和 Windows 上的注释数量可能会显着降低,因为 Docker 在这些操作系统上的虚拟化环境中运行。

然后,您可以停止代理容器Ctrl+C并删除网络:

docker network rm rabbitmq-streams

如果您想更进一步并开始构建应用程序,流 Java 客户端文档是一个很好的起点。

对 RabbitMQ Streams 的概述到此结束,这是一种新的仅附加日志数据结构,具有出色的功能和工具。请继续关注发现有关流的更多信息!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表