国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ 備份交換機(jī)和死信交換機(jī)

這篇具有很好參考價(jià)值的文章主要介紹了RabbitMQ 備份交換機(jī)和死信交換機(jī)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??為處理生產(chǎn)者將消息推送到交換機(jī)中,交換機(jī)按照消息中的路由鍵及自身策略無(wú)法將消息投遞到指定隊(duì)列中造成消息丟失的問(wèn)題,可以使用備份交換機(jī)。
??為處理在消息隊(duì)列中到達(dá)TTL的過(guò)期消息,可采用死信交換機(jī)進(jìn)行消息轉(zhuǎn)存??梢酝ㄟ^(guò)死信交換機(jī)的方式實(shí)現(xiàn)延遲隊(duì)列的需求。
??為實(shí)現(xiàn)消息優(yōu)先消費(fèi)可以針對(duì)隊(duì)列和消息設(shè)置優(yōu)先級(jí),在消息積壓的情況下優(yōu)先級(jí)高的消息將優(yōu)先被消費(fèi)。
??通過(guò)上述描述可知,備份交換機(jī)和死信交換機(jī)處理的場(chǎng)景不同。備份交換機(jī)是處理未被路由的消息,死信交換機(jī)是處理隊(duì)列中過(guò)期的消息。但是,它們都是為了避免消息丟失提供的一種手段。

備份交換機(jī)

??生產(chǎn)者發(fā)送消息的過(guò)程中會(huì)指明交換機(jī)名稱和路由鍵,RabbitMQ接收到消息后,根據(jù)交換機(jī)名稱將消息投遞到指定交換機(jī)中,交換機(jī)再根據(jù)自身類型以及消息攜帶的路由鍵將消息投遞到隊(duì)列中。當(dāng)無(wú)法路由到隊(duì)列時(shí),并且該交換機(jī)存在備份交換機(jī),則該交換機(jī)將該消息投遞給其備份交換機(jī)進(jìn)行處理。
??備份交換機(jī)接收到消息后依舊根據(jù)其自身類型和消息路由鍵進(jìn)行消息投遞,如果依舊無(wú)法匹配到隊(duì)列中,則該消息被丟失。該過(guò)程中的具體流程如下圖所示。
RabbitMQ 備份交換機(jī)和死信交換機(jī),中間件 - RabbitMQ,rabbitmq,中間件

備份交換機(jī)的實(shí)現(xiàn)

??備份交換機(jī)的實(shí)現(xiàn)方式包括:聲明交換機(jī)時(shí)通過(guò)參數(shù)配置和通過(guò)策略進(jìn)行配置。申明交換機(jī)時(shí)配置備份交換機(jī)如下所示。

 Map<String, Object> args = new HashMap<>();
 args.put("alternate-exchange","myAe");      
 channel.exchangeDeclare("normalExchange","direct",true,false,args);
 channel.exchangeDeclare("myAe","fanout",true,false,null);

??通過(guò)上述代碼即實(shí)現(xiàn)了聲明兩個(gè)交換機(jī),其中交換機(jī)myAe是normalExchange的備份交換機(jī)。備份交換機(jī)可以理解為一個(gè)普通交換機(jī),備份交換機(jī)自身并不知曉自己是備份交換機(jī),當(dāng)某個(gè)消息無(wú)法被路由到隊(duì)列中時(shí),該交換機(jī)會(huì)查找自己的備份交換機(jī),如果存在則將消息交由備份交換機(jī)進(jìn)行處理。
??需要說(shuō)明的時(shí),備份交換機(jī)在消息入隊(duì)的時(shí)候也會(huì)根據(jù)自身類型進(jìn)行路由匹配,消息重發(fā)到備份交換機(jī)時(shí)路由鍵和從生產(chǎn)者發(fā)送時(shí)的路由鍵一致,如果是直接交換機(jī)或者主題交換機(jī),則依舊可能會(huì)導(dǎo)致消息丟失,因此備份交換機(jī)建議采用扇形交換機(jī)。
備份交換機(jī)存在以下特殊情況

  • 如果備份交換機(jī)和mandatory參數(shù)一起使用,則mandatory參數(shù)無(wú)效。
  • 如果備份交換機(jī)不存在,則消息丟失且生產(chǎn)者和RabbitMQ都不會(huì)有異常出現(xiàn)。
  • 如果備份交換機(jī)沒(méi)有綁定隊(duì)列,則消息丟失且生產(chǎn)者和RabbitMQ都不會(huì)有異常出現(xiàn)。
  • 如果備份交換機(jī)依舊無(wú)法將消息路由到隊(duì)列,則消息丟失且生產(chǎn)者和RabbitMQ都不會(huì)有異常出現(xiàn)。

死信交換機(jī)

??當(dāng)一個(gè)消息在一個(gè)隊(duì)列中變成死信后,它能被重新發(fā)送到另一個(gè)交換機(jī)中,這個(gè)交換機(jī)就是DLX(死信交換機(jī):Dead-Letter-Exchange),綁定DLX的隊(duì)列就是死信隊(duì)列。
消息變成死信一般由以下幾種情況:

  • 消息被消費(fèi)者拒絕,并且設(shè)置不可重新入隊(duì)
  • 消息過(guò)期(TTL)
  • 隊(duì)列達(dá)到最大長(zhǎng)度。

??根據(jù)上述描述,隊(duì)列中的消息變成死信后將轉(zhuǎn)發(fā)給死信交換機(jī),因此死信交換機(jī)的設(shè)置是在聲明隊(duì)列的過(guò)程中完成的。死信交換機(jī)和備份交換機(jī)類似,其自身并不知道自己是死信交換機(jī),僅指定其為死信交換機(jī)的隊(duì)列知道其死信交換機(jī)身份的存在,本質(zhì)上死信交換機(jī)和正常交換機(jī)并不存在區(qū)別。
??死信交換機(jī)的設(shè)置可通過(guò)聲明隊(duì)列時(shí)設(shè)置和通過(guò)策略設(shè)置兩種方式實(shí)現(xiàn)。聲明隊(duì)列時(shí)設(shè)置如下所示:

Map<String, Object> args = new HashMap<>();
// 聲明該隊(duì)列的死信交換機(jī)為”dlx_exchange“
args.put("x-dead-letter-exchange","dlx_exchange");
// 聲明死信交由死信交換機(jī)處理時(shí)將路由鍵替換為dlx-routing-key
args.put("x-dead-letter-routing-key","dlx-routing-key");
channel.queueDeclare("queue",false,false,false,args);

死信交換機(jī)存在以下特殊情況

  • 如果死信交換機(jī)不存在,則消息丟失且RabbitMQ都不會(huì)有異常出現(xiàn)。
  • 如果死信交換機(jī)沒(méi)有綁定隊(duì)列,則消息丟失且RabbitMQ都不會(huì)有異常出現(xiàn)。
  • 如果死信交換機(jī)依舊無(wú)法將消息路由到隊(duì)列,則消息丟失且RabbitMQ都不會(huì)有異常出現(xiàn)。

延遲隊(duì)列

??延遲隊(duì)列是指當(dāng)消息發(fā)送完成后,消費(fèi)者間隔一段時(shí)間后消費(fèi)該消息,可以通過(guò)死信隊(duì)列的方式實(shí)現(xiàn)延遲隊(duì)列,生產(chǎn)者把消息發(fā)送給設(shè)置了過(guò)期時(shí)間的隊(duì)列中,該隊(duì)列不存在消費(fèi)者,待消費(fèi)過(guò)期后消息會(huì)被投遞到延遲隊(duì)列(死信隊(duì)列),消費(fèi)者消費(fèi)延遲隊(duì)列中的消息,這樣就實(shí)現(xiàn)了消息的延遲處理。

優(yōu)先級(jí)隊(duì)列

??可以針對(duì)隊(duì)列和消息設(shè)置消息,在消息積壓的情況下消費(fèi)者可以優(yōu)先消費(fèi)高優(yōu)先級(jí)的消息。
??僅向設(shè)置優(yōu)先級(jí)的隊(duì)列中發(fā)送具備優(yōu)先級(jí)的消息優(yōu)先級(jí)設(shè)置才有效,如果僅對(duì)消息設(shè)置優(yōu)先級(jí)則優(yōu)先級(jí)設(shè)置無(wú)效。
??消息的優(yōu)先級(jí)默認(rèn)為0,最高為隊(duì)列設(shè)置的最大優(yōu)先級(jí),如果設(shè)置的消息優(yōu)先級(jí)大于隊(duì)列設(shè)置的最大優(yōu)先級(jí),則按照隊(duì)列最大優(yōu)先級(jí)進(jìn)行計(jì)算。
設(shè)置隊(duì)列為優(yōu)先級(jí)隊(duì)列如下所示:

Map<String,Object> map = new HashMap<>();
map.put("x-max-priority",10);
channel.queueDeclare(QUEUE_NAME,true,false,false,map);

發(fā)送具備優(yōu)先級(jí)的消息如下所示:

AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
builder.priority(20000);
AMQP.BasicProperties basicProperties = builder.build();
channel.basicPublish(EXCHANGE_NAME ,ROUTING_KEY,basicProperties,msg.getBytes());

??優(yōu)先級(jí)隊(duì)列存在以下幾點(diǎn)需要注意:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-631482.html

  • 僅在消息積壓的情況下優(yōu)先級(jí)隊(duì)列的設(shè)置才有意義
  • 設(shè)置優(yōu)先級(jí)的消息僅在優(yōu)先級(jí)隊(duì)列中才能體現(xiàn)出優(yōu)先級(jí)消費(fèi)
  • 一旦消息中的優(yōu)先級(jí)設(shè)置大于隊(duì)列的優(yōu)先級(jí),則按照隊(duì)列的優(yōu)先級(jí)進(jìn)行計(jì)算

總結(jié)

比較 備份交換機(jī) 死信交換機(jī) 優(yōu)先級(jí)隊(duì)列
作用 消息無(wú)法路由到隊(duì)列中后交由備份交換機(jī)進(jìn)行處理 消息從隊(duì)列成為死信后交由死信交換機(jī)進(jìn)行處理 擠壓消息在優(yōu)先級(jí)隊(duì)列中可以按照優(yōu)先級(jí)高低被消費(fèi)者消費(fèi)
設(shè)置方法 給某個(gè)交換機(jī)設(shè)置備份交換機(jī),備份交換機(jī)自身不知道自己備份交換機(jī)的身份 給某個(gè)隊(duì)列設(shè)置死信交換機(jī),死信交換機(jī)本身不知道自己死信交換機(jī)的身份 設(shè)置某個(gè)隊(duì)列的優(yōu)先級(jí),在發(fā)送消息的過(guò)程中也聲明消息優(yōu)先級(jí)

到了這里,關(guān)于RabbitMQ 備份交換機(jī)和死信交換機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【RabbitMQ】 RabbitMQ 消息的延遲 —— 深入探索 RabbitMQ 的死信交換機(jī),消息的 TTL 以及延遲隊(duì)列

    【RabbitMQ】 RabbitMQ 消息的延遲 —— 深入探索 RabbitMQ 的死信交換機(jī),消息的 TTL 以及延遲隊(duì)列

    消息隊(duì)列是現(xiàn)代分布式應(yīng)用中的關(guān)鍵組件,用于實(shí)現(xiàn)異步通信、解耦系統(tǒng)組件以及處理高并發(fā)請(qǐng)求。消息隊(duì)列可以用于各種應(yīng)用場(chǎng)景,包括任務(wù)調(diào)度、事件通知、日志處理等。在消息隊(duì)列的應(yīng)用中,有時(shí)需要實(shí)現(xiàn)消息的延遲處理、處理未能成功消費(fèi)的消息等功能。 本文將介紹

    2024年02月05日
    瀏覽(96)
  • .NetCore 使用 RabbitMQ (交換機(jī)/隊(duì)列/消息持久化+mq高級(jí)特性+死信隊(duì)列+延遲隊(duì)列)

    .NetCore 使用 RabbitMQ (交換機(jī)/隊(duì)列/消息持久化+mq高級(jí)特性+死信隊(duì)列+延遲隊(duì)列)

    目錄 一、安裝mq 二、實(shí)操 1、簡(jiǎn)單模式 2、工作模式 3、fanout扇形模式(發(fā)布訂閱) 4、direct路由模式也叫定向模式 5、topic主題模式也叫通配符模式(路由模式的一種) 6、header 參數(shù)匹配模式 7、延時(shí)隊(duì)列(插件方式實(shí)現(xiàn)) 參考資料: 1、我的環(huán)境是使用VMware安裝的Centos7系統(tǒng)。MQ部署

    2023年04月09日
    瀏覽(112)
  • RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    MQ(message queue):本質(zhì)上是個(gè)隊(duì)列,遵循FIFO原則,隊(duì)列中存放的是message,是一種跨進(jìn)程的通信機(jī)制,用于上下游傳遞消息。MQ提供“邏輯解耦+物理解耦”的消息通信服務(wù)。使用了MQ之后消息發(fā)送上游只需要依賴MQ,不需要依賴其它服務(wù)。 功能1:流量消峰 功能2:應(yīng)用解耦 功

    2024年02月07日
    瀏覽(118)
  • RabbitMQ:概念和安裝,簡(jiǎn)單模式,工作,發(fā)布確認(rèn),交換機(jī),死信隊(duì)列,延遲隊(duì)列,發(fā)布確認(rèn)高級(jí),其它知識(shí),集群

    RabbitMQ:概念和安裝,簡(jiǎn)單模式,工作,發(fā)布確認(rèn),交換機(jī),死信隊(duì)列,延遲隊(duì)列,發(fā)布確認(rèn)高級(jí),其它知識(shí),集群

    1.1.1.什么是MQ MQ(message queue:消息隊(duì)列) ,從字面意思上看,本質(zhì)是個(gè) 隊(duì)列 , FIFO 先入先出 ,只不過(guò)隊(duì)列中存放的 內(nèi)容是message 而已 ,還是一種 跨進(jìn)程的通信機(jī)制 , 用于上下游傳遞消息 。在互聯(lián)網(wǎng)架構(gòu)中,MQ 是一種非常常見(jiàn)的上下游 “邏輯解耦+物理解耦” 的消息通信服

    2024年01月20日
    瀏覽(92)
  • 【學(xué)習(xí)日記2023.6.19】 之 RabbitMQ服務(wù)異步通信_(tái)消息可靠性_死信交換機(jī)_惰性隊(duì)列_MQ集群

    【學(xué)習(xí)日記2023.6.19】 之 RabbitMQ服務(wù)異步通信_(tái)消息可靠性_死信交換機(jī)_惰性隊(duì)列_MQ集群

    消息隊(duì)列在使用過(guò)程中,面臨著很多實(shí)際問(wèn)題需要思考: 消息從發(fā)送,到消費(fèi)者接收,會(huì)經(jīng)歷多個(gè)過(guò)程: 其中的每一步都可能導(dǎo)致消息丟失,常見(jiàn)的丟失原因包括: 發(fā)送時(shí)丟失: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消息到達(dá)exchange后未到達(dá)queue MQ宕機(jī),queue將消息丟失 consumer接收

    2024年02月11日
    瀏覽(99)
  • 死信交換機(jī)&延遲隊(duì)列

    死信交換機(jī)&延遲隊(duì)列

    說(shuō)明:在MQ中,當(dāng)一個(gè)隊(duì)列中的消息出現(xiàn)以下情況時(shí),就成為了死信(Dead Letter); 被消費(fèi)者拒絕消費(fèi)或者聲明失敗,并且requeue設(shè)置為false,即不再重新入隊(duì)列; 隊(duì)列中的消息存滿,消息無(wú)法再入隊(duì)列; 消息過(guò)期 此時(shí),可以通過(guò)指定死信交換機(jī),把這些消息路由到一個(gè)專門

    2024年02月16日
    瀏覽(13)
  • 交換機(jī)IOS升級(jí)及備份方法詳細(xì)介紹

    我們先確保要升級(jí)或備份IOS的交換機(jī)能跟我們的PC電腦正常通信。 一、工具及筆記本設(shè)置 這里建議交換機(jī)就在我們的身邊,因?yàn)檫@樣保險(xiǎn)點(diǎn),出了問(wèn)題有人在現(xiàn)場(chǎng)會(huì)容易處理。 這里我們按交換機(jī)是無(wú)任何配置的交換機(jī)設(shè)置 ? 1. 物理連接交換機(jī)控制口及網(wǎng)卡 交換機(jī)通電后,我

    2024年02月05日
    瀏覽(16)
  • RabbitMQ之Exchange(交換機(jī))屬性及備用交換機(jī)解讀

    RabbitMQ之Exchange(交換機(jī))屬性及備用交換機(jī)解讀

    目錄 基本介紹 主要結(jié)論 備用交換機(jī) ?springboot代碼實(shí)戰(zhàn)(備用交換機(jī)) 實(shí)戰(zhàn)架構(gòu) 工程概述 RabbitConfigDeal?配置類:創(chuàng)建隊(duì)列及交換機(jī)并進(jìn)行綁定? MessageService業(yè)務(wù)類:發(fā)送消息及接收消息 主啟動(dòng)類RabbitMq01Application:實(shí)現(xiàn)ApplicationRunner接口 在 RabbitMQ 中,交換機(jī)主要用來(lái)將生產(chǎn)

    2024年02月02日
    瀏覽(17)
  • H3C交換機(jī)配置文件自動(dòng)備份

    目錄 一、自動(dòng)配置文件需求 二、環(huán)境條件 三、自動(dòng)配置文件備份思路 四、搭建SCP服務(wù)器(其實(shí)就是SSH服務(wù)器) 五、交換機(jī)配置自動(dòng)備份 六、常見(jiàn)問(wèn)題 七、官方產(chǎn)品文檔參考資料 1.7.2? 配置備份參數(shù) 1.7.3? 備份當(dāng)前配置 網(wǎng)絡(luò)中有多臺(tái)華三交換機(jī),需要每天一定時(shí)自動(dòng)備份

    2024年02月07日
    瀏覽(29)
  • 【RabbitMQ】RabbitMQ的交換機(jī)

    【RabbitMQ】RabbitMQ的交換機(jī)

    在上文中, 都沒(méi)有交換機(jī),生產(chǎn)者直接發(fā)送消息到隊(duì)列。 而一旦引入交換機(jī),消息發(fā)送的模式會(huì)有很大變化:可以看到,在訂閱模型中,多了一個(gè)exchange角色,而且過(guò)程略有變化: Publisher:生產(chǎn)者,不再發(fā)送消息到隊(duì)列中,而是發(fā)給交換機(jī) Exchange:交換機(jī),一方面,接收生

    2024年03月12日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包