zoukankan      html  css  js  c++  java
  • rocketMQ源码之 似乎并不能严格进行顺序消费

    broker定时向namesrv 注册,会告诉namesrv自己的brokername、brokeraddress、topic+队列数量信息等,namesrv会把topic的信息放到topicQueueTable(只有版本号改变才修改,

    broker只有topic信息发生改变了才改变版本号)中,同一个topic下,不同brokerName下的QueueData(队列信息)放在一个list里面,当producer这边用getTopicRouteInfoFromNameServer方法获取topicRoute

    信息然后用topicRouteData2TopicPublishInfo方法,放到publishInfo中的时候,也确实按照brokerName排序了,所以其messageQueueList是有序的,如果按照官方例子里面订单id取余,

    是可以将多条消息有序的发送到同一个队列,consumer用默认的集群模式分好队列,启用MessageListenerOrderly或者每次只取一条,消费完再取,是可以做到顺序消费的。

    但是如果在极端情况下比如当前topic下某个broker的队列由4个变为了8个,或者某个broker取消了注册,就有可能导致不能发送到特定的队列上,从而引起顺序消费失败。

    ps,brokerName是broker(集群)的标识,集群之间不要重复,应该人为设定

  • 相关阅读:
    java循环结构
    java 修饰符
    java变量类型
    java对象和类
    java 环境配置及开发工具
    easy_install 和 pip
    比利牛斯獒犬 flask web
    vim 命令
    vim vi Ubuntu 设置
    Python interview_python
  • 原文地址:https://www.cnblogs.com/chuliang/p/15390959.html
Copyright © 2011-2022 走看看