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

RabbitMQ-死信交換機(jī)和死信隊(duì)列

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

1. 簡介

1.1 DLX簡介

DLX: Dead-Letter-Exchange 死信交換器,死信郵箱

當(dāng)消息成為Dead message后,可以被重新發(fā)送到另一個交換機(jī),這個交換機(jī)就是DLX。
如下圖所示:
RabbitMQ-死信交換機(jī)和死信隊(duì)列,# RabbitMQ,rabbitmq,分布式,java
其實(shí)死信隊(duì)列就是一個普通的交換機(jī),有些隊(duì)列的消息成為死信后,(比如過期了或者隊(duì)列滿了)這些死信一般情況下是會被 RabbitMQ 清理的。但是你可以配置某個交換機(jī)為此隊(duì)列的死信交換機(jī),該隊(duì)列的消息成為死信后會被重新發(fā)送到此 DLX 。怎么處理這個DLX中的死信就是看具體的業(yè)務(wù)場景了,DLX 中的信息可以被路由到新的隊(duì)列。

2.2 出現(xiàn)死信的情況

  • 隊(duì)列長度到達(dá)限制,無法加入新的消息
  • 消費(fèi)者拒接消費(fèi)消息,并且不重回隊(duì)列。該信息會被清除并進(jìn)入死信隊(duì)列
  • 原隊(duì)列存在消息過期設(shè)置,消息到達(dá)超時時間未被消費(fèi)

2.3 代碼示例

死信隊(duì)列可以定義單條消息和整個隊(duì)列死信,分別是下方的2和4。

2.代碼示例

以下定義了兩個交換機(jī),分別是普通交換機(jī)和死信交換機(jī),定義了兩個隊(duì)列,分別是普通隊(duì)列和死信隊(duì)列。

@Configuration
public class RabbitConfig {
    final static String exchangeNormalName = "exchange.dlx.normal";
    final static String queueNormalName = "queue.dlx.normal";
    final static String exchangeDeadName = "exchange.dlx.dead";
    final static String queueDeadName = "queue.dlx.dead";


    //正常交換機(jī)
    @Bean
    public DirectExchange normalExchange(){
        return ExchangeBuilder.directExchange(exchangeNormalName).build();
    }
    //正常隊(duì)列
    @Bean
    public Queue normalQueue(){
        Map<String, Object> map = new HashMap<>();
        map.put("x-message-ttl", 20000);//設(shè)置20s的過期時間
        map.put("x-dead-letter-exchange", exchangeDeadName);//設(shè)置死信交換機(jī)名字
        map.put("x-dead-letter-routing-key", "error");//設(shè)置死信交換機(jī)路由k
        return QueueBuilder.durable(queueNormalName)
                .withArguments(map)
                .build();
    }

    @Bean
    public Binding normalBinding(DirectExchange normalExchange, Queue normalQueue){
        return BindingBuilder.bind(normalQueue).to(normalExchange).with("order");
    }


    //死信交換機(jī)
    @Bean
    public DirectExchange dlxExchange(){
        return ExchangeBuilder.directExchange(exchangeDeadName).build();
    }
    //死信隊(duì)列
    @Bean
    public Queue dlxQueue(){
        return QueueBuilder.durable(queueDeadName).build();
    }

    @Bean
    public Binding dlxBinding(DirectExchange dlxExchange, Queue dlxQueue){
        return BindingBuilder.bind(dlxQueue).to(dlxExchange).with("error");
    }

}

如上,設(shè)置普通交換機(jī)把過期內(nèi)容放置到死信交換機(jī)中去。最重要的幾行代碼如下:

  • map.put(“x-message-ttl”, 20000);//設(shè)置20s的過期時間
  • map.put(“x-dead-letter-exchange”, exchangeDeadName);//設(shè)置死信交換機(jī)名字
  • map.put(“x-dead-letter-routing-key”, “error”);//設(shè)置死信交換機(jī)路由key

3.測試結(jié)果

RabbitMQ-死信交換機(jī)和死信隊(duì)列,# RabbitMQ,rabbitmq,分布式,java

經(jīng)過20s之后,如下,將普通隊(duì)列的信息放入死信隊(duì)列中

RabbitMQ-死信交換機(jī)和死信隊(duì)列,# RabbitMQ,rabbitmq,分布式,java
其中TTL代表x-message-ttl,DLX代表x-dead-letter-exchange,DLK代表x-dead-letter-routing-key

4.單條消息

上方是將整個隊(duì)列設(shè)置過期時間,也可以將單條消息設(shè)置過期時間,即不給整個隊(duì)列設(shè)置過期時間

		//map.put("x-message-ttl", 20000);//設(shè)置20s的過期時間
        map.put("x-dead-letter-exchange", exchangeDeadName);//設(shè)置死信交換機(jī)名字
        map.put("x-dead-letter-routing-key", "error");//設(shè)置死信交換機(jī)路由k

而是在消息體中設(shè)置過期時間

@Component
@Slf4j
public class MessageService {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    public void senMsg() throws InterruptedException {

        //定義消息
        String msg="單條消息過期時間test";
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setExpiration("10000"); //10s
        Message message= MessageBuilder.withBody(msg.getBytes()).andProperties(messageProperties).build();
        //發(fā)消息
        rabbitTemplate.convertAndSend("exchange.dlx.normal","order",message);
        log.info("消息發(fā)送完畢,發(fā)送時間為:{}", new Date());
    }
}

RabbitMQ-死信交換機(jī)和死信隊(duì)列,# RabbitMQ,rabbitmq,分布式,java

RabbitMQ-死信交換機(jī)和死信隊(duì)列,# RabbitMQ,rabbitmq,分布式,java文章來源地址http://www.zghlxwxcb.cn/news/detail-716248.html

到了這里,關(guān)于RabbitMQ-死信交換機(jī)和死信隊(duì)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

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

    2024年02月11日
    瀏覽(98)
  • RabbitMQ 備份交換機(jī)和死信交換機(jī)

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

    ??為處理生產(chǎn)者將消息推送到交換機(jī)中,交換機(jī)按照消息中的路由鍵及自身策略無法將消息投遞到指定隊(duì)列中造成消息丟失的問題,可以使用備份交換機(jī)。 ??為處理在消息隊(duì)列中到達(dá)TTL的過期消息,可采用死信交換機(jī)進(jìn)行消息轉(zhuǎn)存??梢酝ㄟ^死信交換機(jī)的方式實(shí)現(xiàn)延遲隊(duì)

    2024年02月14日
    瀏覽(22)
  • RabbitMQ系列之死信交換機(jī)的使用

    RabbitMQ系列之死信交換機(jī)的使用

    ? ????歡迎來到我的CSDN主頁!???? ??我是君易--鑨,一個在CSDN分享筆記的博主。???? ??推薦給大家我的博客專欄《RabbitMQ系列之死信交換機(jī)的使用》。???? ??如果感覺還不錯的話請給我關(guān)注加三連吧!???? ? ? ? ? ? 在我們上一期的RabbitMQ博客系列的分享中我們分

    2024年02月19日
    瀏覽(18)
  • RabbitMQ交換機(jī)與隊(duì)列

    RabbitMQ交換機(jī)與隊(duì)列

    RabbitMQ 消息傳遞模型的核心思想是: 生產(chǎn)者生產(chǎn)的消息從不會直接發(fā)送到隊(duì)列 。實(shí)際上,通常生產(chǎn)者甚至都不知道這些消息傳遞傳遞到了哪些隊(duì)列中。 相反, 生產(chǎn)者只能將消息發(fā)送到交換機(jī)(exchange) ,交換機(jī)工作的內(nèi)容非常簡單, 一方面它接收來自生產(chǎn)者的消息,另一方面

    2024年01月24日
    瀏覽(24)
  • RabbitMq創(chuàng)建交換機(jī)和隊(duì)列

    RabbitMq創(chuàng)建交換機(jī)和隊(duì)列

    1. 網(wǎng)頁登錄 IP:1572 ? 2. 輸入登錄賬號密碼 admin admin 3. 點(diǎn)擊Exchanges 添加交換機(jī)Platform_AlarmEngineInterface 和Rg_Platform_AlarmEngineInterface ,Type選擇topic 4. 添加隊(duì)列 VIDEO_Alarm_platform 、 watch_ftp、 RG_VIDEO_Alarm_platform 、 RG_VIDEO_Alarm_platform_jiance 5. 綁定交換機(jī)和隊(duì)列 (1) 點(diǎn)擊Exchanges界面,選擇其

    2024年02月16日
    瀏覽(14)
  • RabbitMQ隊(duì)列及交換機(jī)的使用

    RabbitMQ隊(duì)列及交換機(jī)的使用

    目錄 一、簡單模型 1、首先控制臺創(chuàng)建一個隊(duì)列 2、父工程導(dǎo)入依賴? 3、生產(chǎn)者配置文件 ?4、寫測試類 5、消費(fèi)者配置文件 6、消費(fèi)者接收消息 二、WorkQueues模型 1、在控制臺創(chuàng)建一個新的隊(duì)列 2、生產(chǎn)者生產(chǎn)消息 3、創(chuàng)建兩個消費(fèi)者接收消息 4、能者多勞充分利用每一個消費(fèi)者

    2024年02月04日
    瀏覽(22)
  • 消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用

    消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用

    目錄 RabbitMQ中交換機(jī)的基本概念與作用解析 交換機(jī)的作用: 交換機(jī)的類型: 直連交換機(jī)(Direct Exchange):?將消息路由到與消息中的路由鍵(Routing Key)完全匹配的隊(duì)列。 主題交換機(jī)(Topic Exchange):?使用通配符匹配路由鍵,允許更靈活的消息路由。 扇形交換機(jī)(Fanout E

    2024年01月24日
    瀏覽(25)
  • RabbitMQ(一) - 基本結(jié)構(gòu)、SpringBoot整合RabbitMQ、工作隊(duì)列、發(fā)布訂閱、直接、主題交換機(jī)模式

    RabbitMQ(一) - 基本結(jié)構(gòu)、SpringBoot整合RabbitMQ、工作隊(duì)列、發(fā)布訂閱、直接、主題交換機(jī)模式

    Publisher : 生產(chǎn)者 Queue: 存儲消息的容器隊(duì)列; Consumer:消費(fèi)者 Connection:消費(fèi)者與消息服務(wù)的TCP連接 Channel:信道,是TCP里面的虛擬連接。例如:電纜相當(dāng)于TCP,信道是一條獨(dú)立光纖束,一條TCP連接上創(chuàng)建多少條信道是沒有限制的。TCP一旦打開,就會出AMQP信道。無論是發(fā)布消息

    2024年02月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包