rabbitmq和rocket的工作流程

一、RabbitMQ工作流程

RabbitMQ基于AMQP协议实现消息传递,其核心流程如下:

  1. 生产者端
    1. 建立连接:生产者通过TCP连接(Connection)连接到Broker(RabbitMQ服务器),并创建虚拟信道(Channel)进行通信
    2. 声明交换机和队列
      • 生产者声明交换机(Exchange),设置类型(Direct/Fanout/Topic/Headers)及属性(如持久化)
      • 声明队列(Queue),定义属性(持久化、自动删除等),并通过Binding Key与交换机绑定
    3. 发送消息:生产者将消息发送到交换机,携带Routing Key,交换机根据类型和路由规则将消息分发到匹配的队列
      • Direct模式:精确匹配Routing Key
      • Fanout模式:广播至所有绑定队列
      • Topic模式:通过通配符(*#)模糊匹配
  2. Broker端
    1. 消息存储:队列缓存消息,支持持久化到磁盘以防数据丢失
    2. 消息分发:根据交换机的路由策略和队列属性(如优先级、TTL)管理消息流向
  3. 消费者端
    1. 连接与订阅:消费者创建Connection和Channel,订阅队列并设置回调处理逻辑
    2. 消费与确认
      • 自动ACK:消息被消费者接收后自动删除(风险:处理失败可能导致消息丢失)
      • 手动ACK:消费者处理成功后发送确认(basicAck),失败则拒绝(basicReject/Nack)并重新入队
    3. 流量控制:通过预取值(Prefetch)限制未确认消息数量,防止消费者过载
二、RocketMQ工作流程

RocketMQ采用发布-订阅模型,支持高吞吐与分布式扩展,核心流程如下:

  1. 生产者端
    1. 连接NameServer:生产者通过NameServer获取Broker地址(服务发现)
    2. 发送消息
      • 消息发送至指定Topic,Topic由多个队列(MessageQueue)组成,支持负载均衡(轮询或哈希)选择队列
      • 支持同步、异步、单向发送模式,确保消息可靠性
    3. 事务消息(可选):通过两阶段提交(半消息+本地事务确认)保证消息与本地事务的原子性
  2. Broker端
    1. 消息存储:Broker将消息持久化到CommitLog文件,并按队列索引分发至ConsumeQueue
    2. 高可用:通过主从复制(Master-Slave)和DLedger(Raft协议)实现数据冗余
  3. 消费者端
    1. 订阅与负载均衡
      • 消费者组(ConsumerGroup)订阅Topic,通过集群模式(默认)或广播模式消费消息
      • Broker分配队列给消费者,支持动态扩容(如新增消费者自动分摊队列)
    2. 消息拉取/推送
      • Pull模式:消费者主动从Broker拉取消息,灵活控制消费速率
      • Push模式:Broker主动推送消息(底层仍基于长轮询)
    3. 顺序消费:通过队列锁机制保证同一队列的消息顺序处理
    4. 重试与死信队列:消费失败的消息进入重试队列,超过最大重试次数后转至死信队列
三、核心差异对比

维度

RabbitMQ

RocketMQ

消息模型

基于Exchange-Queue的灵活路由(多模式) 23 41

基于Topic-Queue的发布订阅(分区存储) 57 105

吞吐量

单机万级TPS,适合中小规模 62

单机十万级TPS,支持海量数据与高并发 119 62

消息顺序性

仅单个队列保证顺序 101

队列内严格FIFO,支持全局顺序消息 119 57

事务支持

依赖插件或外部补偿 1

原生支持事务消息(两阶段提交) 119

扩展性

通过镜像队列实现高可用 101

水平扩展(增加Broker/队列) 57 119

适用场景

复杂路由、低频高可靠场景(如金融通知) 62

高吞吐、顺序消息、大数据场景(如日志处理) 62 119

四、典型应用场景
  • RabbitMQ
    • 电商订单通知:通过Fanout交换机广播订单状态至邮件、短信等多个服务
    • 系统解耦:微服务间异步通信,如库存扣减后触发物流调度
  • RocketMQ
    • 日志采集:高吞吐写入日志流,消费者实时分析
    • 交易流水:保证订单处理顺序,避免数据错乱
五、总结
  • RabbitMQ:优势在于灵活的路由规则和易用性,适合需要复杂消息分发的中小型系统
  • RocketMQ:以高吞吐、顺序消息和分布式扩展见长,适合互联网级大规模数据处理
  • 。 选择时需结合业务需求(吞吐量、顺序性、事务要求)及技术栈(运维复杂度、社区支持)综合考量