产品简介
功能概述
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 服务的部署架构如下图所示。
组件说明
-
Producer
消息生产者,创建消息并向队列发送消息。
-
Haproxy
提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理,转发消息生产者的请求。
-
Broker
消息队列服务器实体,实现 AMQP 消息队列和路由功能。
-
Exchange
消息交换机,接收生产者发送的消息,根据 Binding 规则将消息路由给服务器中的队列。
-
Queue
消息队列,用于存储还未被消费者消费的消息。生产者将消息送到队列,消费者从队列中获取和消费消息。多个消费者可以同时订阅同一个队列,队列里的消息分配给不同的消费者。
-
Binding
绑定规则,把 Exchange 和 Queue 按照路由规则绑定起来。
-
Etcd
分布式键值数据库,用于存放集群部分信息(主要是和集群节点对等发现相关的信息)。
-
Consumer
消息消费者,消费者订阅 RabbitMQ 的队列,获取消息。
启动注册工作原理
Broker 启动时连接 Etcd 将自身节点的信息以 key-value 的形式保存到 Etcd 中,接着 Broker 尝试注册到集群中时,会先向 Etcd 中尝试获取锁(所有节点共有同一个锁),获取成功之后当前节点成功加入到集群中,否则节点的 Key 将会被 Etcd 删除。
消息工作原理
-
消息生产者(Producer)调用 SDK,向负载均衡器(Haproxy)发送请求。
-
负载均衡器(Haproxy)将请求发送到 RabbitMQ 的 Broker。
-
RabbitMQ 服务器的交换机(Exchange)根据消息属性将消息路由到队列(Queue)中进行存储。
-
消息消费者(Consumer)通过监听订阅队列处理消息。消息包含消息体和标签两部分,消息体是业务逻辑的数据结构,标签是表述消息体的信息。当消费者消费一条消息时,只是消费消息的消息体,标签会在路由过程中丢失,不会被消费者消费。