SpringCloud RabbitMQ Binder概述

2023-11-29 15:56 更新

以下簡化圖顯示了RabbitMQ綁定程序的工作方式:

圖41.1。RabbitMQ Binder

兔子粘合劑

默認(rèn)情況下,RabbitMQ Binder實現(xiàn)將每個目的地映射到TopicExchange。對于每個消費者組,Queue綁定到該TopicExchange。每個使用者實例為其組的Queue有一個對應(yīng)的RabbitMQ Consumer實例。對于分區(qū)的生產(chǎn)者和使用者,隊列帶有分區(qū)索引后綴,并將分區(qū)索引用作路由鍵。對于匿名使用者(沒有group屬性的使用者),將使用自動刪除隊列(具有隨機(jī)唯一名稱)。

通過使用可選的autoBindDlq選項,您可以配置活頁夾以創(chuàng)建和配置死信隊列(DLQ)(以及死信交換機(jī)DLX,以及路由基礎(chǔ)結(jié)構(gòu))。默認(rèn)情況下,死信隊列具有目標(biāo)名稱,后跟.dlq。如果啟用了重試(maxAttempts > 1),則在重試用盡后,失敗的消息將傳遞到DLQ。如果禁用了重試(maxAttempts = 1),則應(yīng)將requeueRejected設(shè)置為false(默認(rèn)值),以便將失敗的消息路由到DLQ,而不是重新排隊。此外,republishToDlq使綁定程序?qū)⑹〉南l(fā)布到DLQ(而不是拒絕它)。通過此功能,可以將其他信息(例如x-exception-stacktrace標(biāo)頭中的堆棧跟蹤)添加到標(biāo)頭中的消息中。此選項不需要啟用重試。您只需嘗試一次即可重新發(fā)布失敗的消息。從1.2版開始,您可以配置重新發(fā)布郵件的傳遞模式。請參閱republishDeliveryMode屬性。

requeueRejected設(shè)置為true(與republishToDlq=false一起使用)會導(dǎo)致消息被重新排隊并連續(xù)重新發(fā)送,除非失敗的原因是短暫的,否則這可能不是您想要的。通常,應(yīng)通過將maxAttempts設(shè)置為大于1或?qū)?code>republishToDlq設(shè)置為true在活頁夾中啟用重試。

有關(guān)這些屬性的更多信息,請參見“ RabbitMQ Binder Properties”

該框架沒有提供任何標(biāo)準(zhǔn)機(jī)制來使用死信消息(或?qū)⑵渲匦侣酚苫刂麝犃校?/font>“ Dead-Letter隊列處理”中介紹了一些選項。

 在Spring Cloud Stream應(yīng)用程序中使用多個RabbitMQ活頁夾時,重要的是禁用'RabbitAutoConfiguration'以避免將來自RabbitAutoConfiguration的相同配置應(yīng)用于兩個活頁夾。您可以使用@SpringBootApplication批注來排除該類。

從版本2.0開始,RabbitMessageChannelBinderRabbitTemplate.userPublisherConnection屬性設(shè)置為true,以便非事務(wù)生成器避免對使用者的死鎖,如果由于代理上的內(nèi)存警報而阻止了緩存的連接,則可能發(fā)生死鎖。

 當(dāng)前,multiplex使用者(一個使用者正在監(jiān)聽多個隊列)僅受消息驅(qū)動的使用者支持;被輪詢的使用者只能從單個隊列中檢索消息。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號