Rocket

概念

  1. Name Server:Broker 的注册中心,所有的 Broker 都要注册到 Name Server
  2. Broker:RocketMQ 服务,是多个,每个 Broker 可以配置主从节点
  3. Topic:消息主题,由多个 Queue 组成(默认4个,默认不会自动创建,可以修改配置为自动创建)
  4. Queue:消息队列,真正接受消息的载体,队列有三个属性要关注下
    1. 最大位点/代理者位点:表示累计当前队列放了多少条消息
    2. 消费者位点:表示当前队列累计被消费了多少条消息
    3. 差值:代理者位点-消费者位点,队列未被消费的条数
      1. 如果为0:说明队列当前没有消息
      2. 如果是正数:如果值比较大,说明消息堆积或阻塞,要解决,如果值比较小可能是峰值情况,消费者能力跟不上,过一段时间再看看
      3. 如果是负数:不合理的,有可能是重置过
  5. Tag:消息分类,给消息打个标签,在生产消息和消费消息时指定 tag,不违反订阅一致性的前提下让消费者更灵活
  6. group:分组,可以给消息生产者和消费者指定一个归属的组,不管是生产者还是消费者只能属于一个组
  7. producer:消息生产者,要明确 Topic,表示这个消息要发到哪个 Topic
  8. consumer:消息消费者,要明确 Topic(订阅关系,这个消费者就消费这个 Topic 下的消息) 和 consumerGroup
  9. consumerGroup:消费者组,一个组下的所有消费者订阅的 Topic 必须相同
    1. 比如 Topc 下有 4 个 queue,分别是 q1、q2、q3、q4
    2. 如果消费者数量是 2( c1、c2),可能的情况是 (q1,q2) - c1(q3,q4) - c2
    3. 如果消费者数量是 3(c1、c2、c3),可能的情况是 (q1,q2) - c1q3 -c2q4 - c3
    4. 如果消费者数量是 4,就每个消费者绑定一个 queue
    5. 如果消费者数量是 5(c1...c5),可能的情况是 q1-c1q2-c2q3-c3q4-c4,c5 就空闲了

生产者发送消息方式(是否等待响应划分)

  1. 单向:发出去就不管了
  2. 同步:发出去会等待 mq 主机响应,能知道是成功还是失败
  3. 异步:发出去后不直接等 mq 主机响应,配置一个异步回调方法,mq 主机响应后会调用这个方法

生产者发送消息方式(从功能上划分)

  1. 延迟消息

    1. 顾名思义就是延迟发送延迟消费的意思,等一段时间才执行消费逻辑
    2. 不是给生产者或消费者指定延迟时间,是给消息指定时间
    3. 具体是一个延迟级别,每个级别代表不同延迟时间(具体级别到官网找)
  2. 批量消息

    1. 一次发送多条消息,这个本没什么好说的,主要区别是怎么放到队列上
    2. 比如一次发送一条,轮询放到队列
    3. 如果是批量,这批消息算一次发送,这批次的消息都放到一个队列上
  3. 顺序消息

    1. 消费者默认是并发模式,意思多线程,这需要等待 CPU 分配调度权限的,保证不了先后顺序
    2. 消费者可以开启单线程模式,但是还是保证不了顺序,因为 Topic 是多个队列,每个队列里面多个消息
    3. 解决方案就是把 要保证顺序的消息都放到一个队列中

消费者获取消息方式

  1. pull:消费者主动拉取 queue 的消息
  2. push:queue 主动把消息推给消费者(已废弃,底层也是封装了 pull)

消息发送流程(负载均衡场景)

  1. 消息发送的时候会指定Name Server、Topic 、Group(对于生产者,Group 不重要)
  2. 消息先给 Name Server,Name Server 决定发送到哪个 Broker
  3. Broker 再把消息发送到具体的 Topic
  4. Topic 里面有多个 queue,默认轮询方式放入具体的 queue
    1. 假设 Topic 有 4 个队列,第一次消息放到 q1,第二次消息就放到 q2...第五次消息放入 q1
    2. 如果是 批量消息,消息不会分发到队列,这批次消息都发送到一个队列上

key

给消息设置一个 key,消费的时候根据这个去重

幂等

多次操作和第一次操作,产生的影响是一致的

消费

可以设置最大重试次数,不设置如果是并发模式16次,顺序模式integer最大值次,仍旧消费失败丢到死信队列(放到一个新的 topic,名称为 %DLQ%消费者组名称)

有了死信 topic ,专门写个消费者监听这个 topic,人工处理,发邮件短信等

消费者的重试,每次一个级别,累计要48小时,时间太长了,消费的时候可以拿到重试次数,可以做达到多少次就走人工处理,就不用发到死信队列

控制面板

posted @ 2024-07-20 21:23  CyrusHuang  阅读(1)  评论(0编辑  收藏  举报