RocketMQ消費者配置消費場景解析

????????在使用RocketMQ時,發(fā)現(xiàn)同一個consumerGroup下的不同topic在初始化不同的DefaultMQPushConsumer時會相互覆蓋前面的topic導(dǎo)致先初始化的topic無法消費外盯,所以總結(jié)了以下場景下消費者的消費情況

假設(shè)現(xiàn)在有一個producer和兩個consumer交播,分別為consumer1和consumer2,consumer1和consumer2依據(jù)topic的個數(shù)初始化DefaultMQPushConsumer。

consumer1和consumer2配置相同的單個consumerGroup挂签,單個topic和tags

????????此種場景下,consumer1與consumer2能正常消費到producer發(fā)送的所有消息盼产,并遵循broker端的lb策略饵婆,consumer1與consumer2消費到的消息之和等于producer發(fā)送的消息數(shù)目?

consumer1和consumer2配置相同的單個consumerGroup,多個topic和tags

? ? ? ? 此種場景下,若客戶端初始化DefaultMQPushConsumer依據(jù)topic的數(shù)量進(jìn)行初始化侨核,則consumer1與consumer2與broker建立心跳鏈接時會相互覆蓋相同consumerGroup下的消費topic信息草穆,這樣會導(dǎo)致部分消息消費不了。

????????詳情見RecketMQ-同一個訂閱組下有多個Topic搓译,消息能發(fā)送到Topic中悲柱,但無法被監(jiān)聽到 - CSDN博客

? ? ? ? 若想保證消費同一consumerGroup下的多個topic和tag的消息,客戶端在初始化時需要依據(jù)consumerGroup的數(shù)量只初始化一個DefaultMQPushConsumer實例些己,之后在設(shè)置consumer訂閱的topic和tag時豌鸡,多次設(shè)置topic和tag的組合,即

? ??????this.consumer.subscribe(topicA, tagsA);? ? ? ??

????????this.consumer.subscribe(topicB, tagsB);

? ? ? ? ...

????????DefaultMQPushConsumerImpl中關(guān)于subscribe源碼實現(xiàn)? ? ? ??

?????????public void subscribe(String topic, String subExpression)throws MQClientException {? ? ? ??

????????????????try {

????????????????????????SubscriptionData subscriptionData = ????????????????????????FilterAPI.buildSubscriptionData(this.defaultMQPushConsumer.getConsumerGroup(), topic, subExpression);

? ? ? ????????????????? this.rebalanceImpl.getSubscriptionInner().put(topic, subscriptionData);

? ? ? ? ????????????????if (this.mQClientFactory !=null) {

????????????????????????????????this.mQClientFactory.sendHeartbeatToAllBrokerWithLock();

? ? ? ????????????????? }

????????????????}catch (Exception var4) {

????????????????????????throw new MQClientException("subscription exception", var4);

? ? ????????????}

????????}

????????由DefaultMQPushConsumerImpl中對subscribe的實現(xiàn)源碼可知段标,不同topic和對應(yīng)的tag以key-value的形式存在于subsCriptionInner中涯冠,該對象的類型為ConcurrentHashMap,也就意味著如果重復(fù)注冊相同topic逼庞,會覆蓋之前關(guān)于相同topic的訂閱蛇更,這點在使用單個DefaultMQPushConsumer要注意。

consumer1和consumer2配置相同的多個consumerGroup赛糟,topic和tags與consumerGroup對應(yīng)

? ? ? ? 此種情況相當(dāng)于多個情況1的實現(xiàn)派任,消費者consumer1和consumer2可以正確消費所有消息。

consumer1和consumer2配置相同的單個consumerGroup璧南,單個topic和多個tag

????????此種情況要說一下為啥RocketMQ對consumerGroup和topic都不追加s定義掌逛,只對tag用復(fù)數(shù)詞修飾。這是因為tags表示的意思為一個或多個tag的意思司倚,RocketMQ自身會根據(jù)tags字符串中的分隔符“|”來訂閱不同的tag颤诀。實際上在我們定義topic和tags時也就默認(rèn)了一對多的情況,并不用針對多個tag設(shè)置多個相同名字的topic对湃,這樣反而會出現(xiàn)情況2中的tag覆蓋崖叫,丟失部分消息。? ?

????????所以此種情況下與1情況相同拍柒,consumer1和consumer2能正確消費所有消息心傀。? ? ?

consumer1和consumer2配置不同的多個consumerGroup,相同的單個topic和tags

????????此種情況用于consumer1和consumer2需要同時消費所有producer發(fā)出的消息拆讯。consumer1和consumer2消費的消息之和等于producer生產(chǎn)的消息的2倍脂男,所有發(fā)出的消息都會同時出現(xiàn)在consumer1和consumer2的消費隊列中? ? ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市种呐,隨后出現(xiàn)的幾起案子宰翅,更是在濱河造成了極大的恐慌,老刑警劉巖爽室,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汁讼,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘿架,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門瓶珊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耸彪,你說我怎么就攤上這事伞芹。” “怎么了蝉娜?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵唱较,是天一觀的道長。 經(jīng)常有香客問我召川,道長南缓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任扮宠,我火速辦了婚禮西乖,結(jié)果婚禮上狐榔,老公的妹妹穿的比我還像新娘坛增。我一直安慰自己,他們只是感情好薄腻,可當(dāng)我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布收捣。 她就那樣靜靜地躺著,像睡著了一般庵楷。 火紅的嫁衣襯著肌膚如雪罢艾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天尽纽,我揣著相機(jī)與錄音咐蚯,去河邊找鬼。 笑死弄贿,一個胖子當(dāng)著我的面吹牛春锋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播差凹,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼期奔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了危尿?” 一聲冷哼從身側(cè)響起呐萌,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谊娇,沒想到半個月后肺孤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年渠旁,在試婚紗的時候發(fā)現(xiàn)自己被綠了攀例。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡顾腊,死狀恐怖粤铭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杂靶,我是刑警寧澤梆惯,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站吗垮,受9級特大地震影響垛吗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烁登,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一怯屉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饵沧,春花似錦锨络、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至是钥,卻和暖如春掠归,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悄泥。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工虏冻, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弹囚。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓厨相,卻偏偏與公主長得像,于是被迫代替她去往敵國和親余寥。 傳聞我的和親對象是個殘疾皇子领铐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)宋舷,斷路器绪撵,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 分布式開放消息系統(tǒng)(RocketMQ)的原理與實踐 來源:http://www.reibang.com/p/453...
    meng_philip123閱讀 12,906評論 6 104
  • 背景介紹 Kafka簡介 Kafka是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng)祝蝠。主要設(shè)計目標(biāo)如下: 以時間復(fù)雜度為O...
    高廣超閱讀 12,826評論 8 167
  • RocketMQ是一款分布式音诈、隊列模型的消息中間件幻碱,具有以下特點: 能夠保證嚴(yán)格的消息順序 提供豐富的消息拉取模式...
    AI喬治閱讀 2,064評論 2 5
  • 陽光斑駁,透過繁密疊層的樹葉參差不齊地投照在鋪滿鵝卵石的林蔭小徑上细溅。每當(dāng)踏上這條熟悉而又陌生的小道褥傍,我的腦...
    赭色閱讀 868評論 0 2