rocketmq 概念

  1. Name Server:Broker 的注册中心

    1. 作为 Broker 的注册中心,提供给生产者和消费者查找 Broker 的能力(路由)
    2. 既然是注册中心,和 Nacos 一样有心跳检测机制,不健康的 Broker 会被剔除
  2. Broker:RocketMQ 核心,接收生产者的消息,消费者从这里取消息

    1. 两种类型 Master、Slave(主从,主可写可读,从只能读)
    2. 消息到 Broker 后,然后根据 Topic 分类,轮询放入队列
  3. Producer:消息生产者,有三种发送消息的方式

    1. 单向:不管消息是否发送成功,也 不接收 Broker 响应回调
    2. 同步:发送后等待服务器响应
    3. 异步:不管消息是否发送成功,但 会接收 Broker 响应回调
  4. Consumer:消息消费者,默认多线程消费,如果要保证顺序要改为单线程。有两种接收消息的方式

    1. Push:Broker 会根据订阅关系主动将消息推送给消费者,优点是及时性好,缺点是如果推送大量消息可能消费者处理不过来导致宕机
    2. Pull:消费者根据订阅关系主动向 Broker 拉取消息,拉取的频率要消费者自己配置,优点是消费者不会因为能力不足处理不过来,缺点是频率如果控制不好,可能造成消费不及时
  5. Topic :消息主题

    1. Broker 的一种逻辑分区,消息发送到 Broker 后,会放到指定的 Topic,消费者也是到 Topic 拉取消息
    2. 也可以理解为消息的分类(一级分类,Tag 是二级分类)
    3. 默认 4 个队列,可以修改(生产者发送消息时的配置项)
  6. Tag:消息标签(也可以理解为消息的二级分类),发送一个带 Tag 的消息,不同的消费者可以根据 Tag 选择是否处理

  7. ConsumerGroup:消费者组

    1. 订阅一致性:同一组下的消费者必须订阅同一个 Topic
    2. 如果多个消费者组订阅了某个 Topic,每个组都会接收到消息,但是每个组下只能一个消费者去消费(默认的集群模式下,也就是点对点模式,如果消费者是广播模式,这个组下的每个消费者都要消费)
  8. Queue:消息队列,真正存放消息的地方,属于 Topic,默认一个 Topic 有 4 个队列

简要的消息流程

  1. 生产者把消息发送到 Broker(NameServer 负责路由到哪个 Broker),发送失败会重试,默认 2 次
  2. Broker 负责把消息放入指定的 Topic 下的队列中,如果投递成功,该队列最大位点+1
    1. 如果是顺序消息,这批消息会放入同一个队列
    2. 如果不是顺序消息,负载均衡(轮询)地放入队列
  3. 订阅了这个 Topic 的消费者组都会收到消息
  4. 每个消费者组下的消费者也是轮询获取消息(默认方式,集群,也可以改为广播模式)
    1. 消费成功,队列消费者位点+1
    2. 如果消费失败,消息会重新放入队列,该组下的其他消费者(如果没有,重试也是自己)尝试消费
      1. 默认重试消费 16 次,如果 16 次都失败,消息进入死信队列
posted @   CyrusHuang  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示