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(集群)的标识,集群之间不要重复,应该人为设定

  • 相关阅读:
    WSP_mainActivity
    使用Xutils(HttpUtils)请求网络数据
    ScrollView横向滑动与fragment的联动
    侧滑菜单
    Pull解析xml文件
    Xlistview的应用1(上拉刷新,下拉加载)fragment
    XlistView4(脚部刷新)
    XlistView3(头部的代码)
    GCD队列组的使用
    GCD栅栏函数dispatch_barrier
  • 原文地址:https://www.cnblogs.com/chuliang/p/15390959.html
Copyright © 2011-2022 走看看