RabbitMQ
万能的消息队列代理
RabbitMQ 是一款免费且开源的软件。此外,Broadcom 还提供企业级商业版本,并配有 24/7 全天候专家支持。
免费开源
RabbitMQ 是一款功能强大、企业级的开源消息和流处理代理,能够为应用程序实现高效、可靠且多功能的通信——非常适合分布式微服务、实时数据和物联网场景。
它在 Mozilla Public License 2.0 许可下免费使用,并拥有活跃的全球社区。欢迎深入阅读我们易于上手的文档,或通过贡献代码来塑造它的未来!
商业服务
如果您正在运行关键任务型应用,Tanzu RabbitMQ 企业版将是您的不二之选。它能通过产品原厂工程师提供的 24/7 专家支持、更长的生命周期、灾难恢复、云成本优化及符合行业合规性等服务,确保您的应用保持高可靠性与安全性。
常见用例示例
以下是我们从社区或客户那里了解到的几个常见用例。这有助于您更好地理解 RabbitMQ 是什么以及它如何为您提供帮助。
- 解耦服务
- RPC
- 流处理
- 物联网 (IoT)
解耦互联服务
假设您有一个后端服务需要向最终用户发送通知。目前有两种通知渠道:电子邮件和移动端推送通知。
后端将通知发布到两个队列,每个渠道一个。负责管理邮件和推送通知的程序订阅它们感兴趣的队列,并在通知到达时立即进行处理。
➡ 优势
- RabbitMQ 可以缓冲负载峰值。
- 您可以在不中断整个服务的情况下,对通知管理器进行维护。
远程过程调用 (RPC)
假设您经营一家音乐厅。演出门票通过多个网站和实体售票亭销售。所有渠道的订单必须经过复杂处理,以根据余票情况确定客户是否成功购票。网站或售票亭要求以极短的时间获得订单响应。
订单被发布到带有关联 ID (Correlation ID) 的 RabbitMQ 队列中。推送订单的调用者随后订阅另一个队列,并等待带有相同关联 ID 的回复。
为了实现低延迟,经典队列 (Classic Queue) 是不错的选择,但它牺牲了一定的安全性——调用者仍需具备重试机制。如果订单绝对不能丢失,您可能更倾向于结合使用确认机制和仲裁队列 (Quorum Queues),以确保消息在确认后是安全的。
这种拓扑结构允许订单处理序列化,从而实现“先到先得”的服务顺序,从而无需使用事务。
➡ 优势
- RabbitMQ 客户端可以同时充当发布者和消费者。
- RabbitMQ 可用于分发 RPC 调用。
流处理
假设您运营一个视频平台。当用户上传新视频并安全存储后,您需要完成多项任务:运行上传后分析、转码出低画质版本、通知订阅了作者的其他用户等。
上传服务将“新视频”事件追加到 RabbitMQ 流 (Stream) 中。多个后端应用可以独立订阅该流并读取新事件。用户需要立即收到通知,但上传后分析可以稍后在每天一次的批处理中执行。
➡ 优势
- 流非常高效,且无需复制消息。
- 消费者可以在流中前后切换,即使存在多个并发消费者也互不影响。
物联网 (IoT)
假设您提供跨星系的包裹递送服务。您拥有一群太空无人机,需要定期将状态上报给位于 Kepler-438 b 系外行星上的服务器。遗憾的是,网络连接状况并不理想……
每架太空无人机都运行一个本地 RabbitMQ 独立节点,用于缓存上报数据,直到能够与上游 RabbitMQ 建立连接。
当行星对齐(连接恢复)时,无人机的 RabbitMQ 会将所有报告“铲”(Shovel)送至上游 RabbitMQ。
➡ 优势
- 通过使用 Shovel 和 Federation 等功能,RabbitMQ 的部署方式可以串联起来,以满足服务的各种需求。
- MQTT 非常适合处理数百万级的并发连接。
用户反馈如何?
RabbitMQ 在全球拥有数百万用户。以下是一些用户对它的评价!
RabbitMQ 是我职业生涯中唯一一个从不给我添乱的消息代理。
我在生产环境中运行 RabbitMQ 超过 8 年了,甚至曾在 180 辆公交车组成的队列中使用过,每辆车上都本地运行着一个 RabbitMQ 实例。在这些年里,从来没有出现过任何问题。