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

  • 相关阅读:
    决策表
    边界值
    等价类
    python_安装python2.7.7和easy_install
    网络_系统测试方案
    软件测试之魂_测试方案模板
    初识HTTP协议web开发
    Bootstrap框架
    jQuery快速入门
    前端基础之BOM和DOM
  • 原文地址:https://www.cnblogs.com/chuliang/p/15390959.html
Copyright © 2011-2022 走看看