功能概述

RabbitMQ 是基于 AMQP 标准协议研发的高吞吐、低延迟、高可扩展的消息队列服务,并以云应用的形式在 AppCenter 中部署,具备可靠性、灵活的路由、事务、高可用的队列、消息排序、可视化管理等功能,服务器端用 Erlang 语言编写,天生具备高可用和高并发的特性。

当前,RabbitMQ 服务最新版本基于开源 RabbitMQ 3.8.19 版本构建。

产品优势

金融级数据强一致性

支持事务、消息确认、请求重试等特性,以及消息队列高可用等灵活的策略机制,完全可以满足金融级企业对消息中间件高可靠、高可用、数据强一致性的要求。

灵活的路由方式

支持 direct、topic、headers 和 fanout 等路由方式。当用户有更加复杂的路由需求时,可以通过组合上述交换机的方式来实现。为了实现最大化的灵活性,RabbitMQ 还支持用户自己设置交换机类型。

支持多种传输协议

支持与 MQTT、STOMP、WebSockets 等多种通信传输协议对接,可广泛应用到各类行业应用场景中。例如:MQTT 作为目前广泛应用于物联网领域的通信协议,已经实现了与 RabbitMQ 的无缝对接,承载来自物联网终端产生的海量消息数据。

集成高可用负载均衡

集成了 HAProxy 负载均衡器,通过 Keepalived 支持高可用负载均衡模式(主备),保证整个集群运行更加稳定高效。在使用配置过程中,在 HAProxy + Keepalived 节点设置中选择负载均衡使用模式,后续便可以通过配置参数管理界面调整负载均衡策略。

支持大规模集群部署

为了防止因节点间网络不稳定而导致集群出现分裂现象,RabbitMQ 集群部署时会限制规模。而云平台强大的网络能力及 AppCenter 对集群应用调度的优化能力,使 RabbitMQ 可以实现较大规模的节点部署,并带来整体使用性能的提高。

完善的监控告警能力

部分使用场景中,消息量可能会出现爆发性突增,给消息队列集群的运维带来了极大的挑战。RabbitMQ 提供完善的监控告警功能,可以显示集群运行中的 CPU、内存、硬盘等资源消耗的详细监控信息。同时,用户也可以看到诸如整体服务状态、服务层级等健康信息。

横向与纵向在线伸缩

支持横向与纵向在线伸缩。RabbitMQ 支持通过新增集群节点进行横向扩容,以及通过修改节点配置进行节点纵向伸缩。

插件支持

  • 磁盘节点支持消息延迟队列插件,详细使用说明请参见官方文档

  • RabbitMQ 节点支持消息追踪插件,详细使用说明请参见官方文档

产品架构

RabbitMQ 服务的部署架构如下图所示。

architecture

组件说明

  • Producer

    消息生产者,创建消息并向队列发送消息。

  • Haproxy

    提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理,转发消息生产者的请求。

  • Broker

    消息队列服务器实体,实现 AMQP 消息队列和路由功能。

  • Exchange

    消息交换机,接收生产者发送的消息,根据 Binding 规则将消息路由给服务器中的队列。

  • Queue

    消息队列,用于存储还未被消费者消费的消息。生产者将消息送到队列,消费者从队列中获取和消费消息。多个消费者可以同时订阅同一个队列,队列里的消息分配给不同的消费者。

  • Binding

    绑定规则,把 Exchange 和 Queue 按照路由规则绑定起来。

  • Etcd

    分布式键值数据库,用于存放集群部分信息(主要是和集群节点对等发现相关的信息)。

  • Consumer

    消息消费者,消费者订阅 RabbitMQ 的队列,获取消息。

启动注册工作原理

Broker 启动时连接 Etcd 将自身节点的信息以 key-value 的形式保存到 Etcd 中,接着 Broker 尝试注册到集群中时,会先向 Etcd 中尝试获取锁(所有节点共有同一个锁),获取成功之后当前节点成功加入到集群中,否则节点的 Key 将会被 Etcd 删除。

消息工作原理

  1. 消息生产者(Producer)调用 SDK,向负载均衡器(Haproxy)发送请求。

  2. 负载均衡器(Haproxy)将请求发送到 RabbitMQ 的 Broker。

  3. RabbitMQ 服务器的交换机(Exchange)根据消息属性将消息路由到队列(Queue)中进行存储。

  4. 消息消费者(Consumer)通过监听订阅队列处理消息。消息包含消息体和标签两部分,消息体是业务逻辑的数据结构,标签是表述消息体的信息。当消费者消费一条消息时,只是消费消息的消息体,标签会在路由过程中丢失,不会被消费者消费。