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

RabbitMQ消息可靠性投遞與ACK確認(rèn)機(jī)制

這篇具有很好參考價值的文章主要介紹了RabbitMQ消息可靠性投遞與ACK確認(rèn)機(jī)制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1.RabbitMQ的消息可靠性投遞

  • 什么是消息的可靠性投遞
    • 保證消息百分百發(fā)送到消息隊列中去
    • 保證MQ節(jié)點(diǎn)成功接收消息
    • 消息發(fā)送端需要接收到MQ服務(wù)端接收到消息的確認(rèn)應(yīng)答
    • 完善的消息補(bǔ)償機(jī)制,發(fā)送失敗的消息可以再感知并二次處理
  • RabbitMQ消息投遞路徑
    • 生產(chǎn)者–>交換機(jī)–>隊列–>消費(fèi)者
    • 通過兩個節(jié)點(diǎn)控制消息的可靠性投遞
      • 生產(chǎn)者到交換機(jī):通過confirmCallback
      • 交換機(jī)到隊列:通過returnCallback
  • 建議
    • 開啟消息確認(rèn)機(jī)制以后,保證了消息的準(zhǔn)確送達(dá),但由于頻繁的確認(rèn)交互,RabbitMQ整體效率變低,吞吐量下降嚴(yán)重,不是很重要的消息不建議使用消息確認(rèn)機(jī)制

2.RabbitMQ消息可靠性投遞confirmCallback實(shí)戰(zhàn)

  • 生產(chǎn)者到交換機(jī)

    • 通過confirmCallback
    • 生產(chǎn)者投遞消息后,如果Broker收到消息后,會給生產(chǎn)者一個ACK。生產(chǎn)者通過ACK可以確認(rèn)這條消息是否正常發(fā)送到Broker,這種方式是消息可靠性投遞的核心
  • 開啟confirmCallback配置

    spring.rabbitmq.publisher-confirm-type=correlated
    
  • 消息發(fā)送測試

    package com.gen;
    
    import com.gen.config.RabbitMQConfig;
    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class GenRabbitmqApplicationTests {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @Test
        void testConfirmCallback() {
            this.rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
                System.out.println(correlationData);
                System.out.println(cause);
                if (ack) {
                    System.out.println("發(fā)送成功");
                } else {
                    System.out.println("發(fā)送失敗");
                }
            });
            this.rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "order.new", "您有新訂單?。?!");
            // 模擬消息投遞失敗
    //        this.rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME+"1", "order.new", "您有新訂單?。?!");
        }
    }
    

3.RabbitMQ消息可靠性投遞returnCallback實(shí)戰(zhàn)

  • 交換機(jī)到隊列

    • 通過returnCallback
    • 消息從交換機(jī)發(fā)送到對應(yīng)隊列失敗時觸發(fā)
    • 兩種模式
      • 交換機(jī)到隊列不成功,則丟棄消息(默認(rèn))
      • 交換機(jī)到隊列不成功,返回給消息生產(chǎn)者,觸發(fā)returnCallback
  • 配置文件開啟配置

    # 開啟returnCallback配置
    spring.rabbitmq.publisher-returns=true
    # 修改交換機(jī)投遞到隊列失敗的策略,true交換機(jī)處理消息到路由失敗會返回給生產(chǎn)者
    spring.rabbitmq.template.mandatory=true
    
  • 消息發(fā)送測試

    package com.gen;
    
    import com.gen.config.RabbitMQConfig;
    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class GenRabbitmqApplicationTests {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @Test
        void testReturnCallback() {
            this.rabbitTemplate.setReturnsCallback((returned) -> {
                System.out.println(returned);
            });
            this.rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "order.new", "您有新訂單?。?!");
            // 模擬消息轉(zhuǎn)發(fā)隊列失敗
    //        this.rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "gen.order.new", "您有新訂單!!!");
        }
    }
    

4.RabbitMQ消息確認(rèn)機(jī)制ACK

  • 背景:消費(fèi)者從Broker中監(jiān)聽消息,需要確保消息被合理處理

RabbitMQ消息可靠性投遞與ACK確認(rèn)機(jī)制,RabbitMQ,rabbitmq

  • RabbitMQ的ACK介紹

    • 消費(fèi)者從RabbitMQ收到消息并處理完成后,反饋給RabbitMQ,RabbitMQ收到反饋后才將此消息從隊列中刪除
    • 消費(fèi)者在處理消息出現(xiàn)了網(wǎng)絡(luò)不穩(wěn)定、服務(wù)器異常等現(xiàn)象,那么就不會有ACK反饋,RabbitMQ會認(rèn)為這個消息沒有正常消費(fèi),會將消息重新放入隊列中
    • 只有當(dāng)消費(fèi)者正確發(fā)送ACK反饋,RabbitMQ確認(rèn)收到后,消息才會從RabbitMQ服務(wù)器的數(shù)據(jù)中刪除
    • 消息的ACK確認(rèn)機(jī)制默認(rèn)是打開的,消息如未被進(jìn)行ACK的消息確認(rèn)機(jī)制,這條消息被鎖定Unacked
  • 確認(rèn)方式

    • 自動確認(rèn)(默認(rèn))
    • 手動確認(rèn)manual
  • 配置文件開啟手動確認(rèn)

    spring.rabbitmq.listener.simple.acknowledge-mode=manual
    
  • 消費(fèi)者代碼

    package com.gen.listener;
    
    import com.gen.config.RabbitMQConfig;
    import com.rabbitmq.client.Channel;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.annotation.RabbitHandler;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    import java.io.IOException;
    
    @Component
    @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
    public class OrderMQListener {
    
        @RabbitHandler
        public void orderConsumer(String msg, Message message, Channel channel) throws IOException {
            System.out.println(msg);
            System.out.println(message);
            System.out.println(channel);
            long deliveryTag = message.getMessageProperties().getDeliveryTag();
            System.out.println(deliveryTag);
    
            // 成功確認(rèn),消費(fèi)成功
            channel.basicAck(deliveryTag, false);
            // 拒絕后重新入隊
    //        channel.basicNack(deliveryTag, false,true);
        }
    }
    
  • deliveryTag介紹:表示消息投遞序號,每次消費(fèi)消息或者消息重新投遞后,deliveryTag都會增加

  • basicNack和basicReject介紹

    • basicReject一次只能拒絕接收一個消息,可以設(shè)置是否重新入隊requeue
    • basicNack方法可以支持一次0個或者多個消息的拒收,可以設(shè)置是否重新入隊requeue
  • 人工審核異常消息文章來源地址http://www.zghlxwxcb.cn/news/detail-830590.html

    • 設(shè)置重試閾值,超過后確認(rèn)消費(fèi)成功,記錄消息,人工處理

到了這里,關(guān)于RabbitMQ消息可靠性投遞與ACK確認(rèn)機(jī)制的文章就介紹完了。如果您還想了解更多內(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)文章

  • 【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-4.3-如何保證消息的可靠性投遞與消費(fèi)

    【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-4.3-如何保證消息的可靠性投遞與消費(fèi)

    ????????根據(jù)RabbitMQ的工作模式,一條消息從生產(chǎn)者發(fā)出,到消費(fèi)者消費(fèi),需要經(jīng)歷以下4個步驟: 生產(chǎn)者將消息發(fā)送給RabbitMQ的Exchange交換機(jī); Exchange交換機(jī)根據(jù)Routing key將消息路由到指定的Queue隊列; 消息在Queue中暫存,等待消費(fèi)者消費(fèi)消息; 消費(fèi)者從Queue中取出消息消費(fèi)

    2024年03月11日
    瀏覽(28)
  • rabbitmq消息可靠性之消息回調(diào)機(jī)制

    rabbitmq消息可靠性之消息回調(diào)機(jī)制

    rabbitmq消息可靠性之消息回調(diào)機(jī)制 rabbitmq在消息的發(fā)送與接收中,會經(jīng)過上面的流程,這些流程中每一步都有可能導(dǎo)致消息丟失,或者消費(fèi)失敗甚至直接是服務(wù)器宕機(jī)等,這是我們服務(wù)接受不了的,為了保證消息的可靠性,rabbitmq提供了以下幾種機(jī)制 生產(chǎn)者確認(rèn)機(jī)制 消息持久

    2024年02月08日
    瀏覽(37)
  • RabbitMQ --- 消息可靠性

    RabbitMQ --- 消息可靠性

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

    2024年02月14日
    瀏覽(28)
  • RabbitMQ消息的可靠性

    面試題: Rabbitmq怎么保證消息的可靠性? 1.消費(fèi)端消息可靠性保證: 消息確認(rèn)(Acknowledgements) : 消費(fèi)者在接收到消息后,默認(rèn)情況下RabbitMQ會自動確認(rèn)消息(autoAck=true)。為保證消息可靠性,可以設(shè)置autoAck=false,使得消費(fèi)者在處理完消息后手動發(fā)送確認(rèn)(basicAck)。如果消費(fèi)

    2024年04月14日
    瀏覽(25)
  • RabbitMQ-保證消息可靠性

    RabbitMQ-保證消息可靠性

    消息從發(fā)送,到消費(fèi)者接收,會經(jīng)理多個過程: 其中的每一步都可能導(dǎo)致消息丟失,常見的丟失原因包括: 發(fā)送時丟失: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消息到達(dá)exchange后未到達(dá)queue MQ宕機(jī),queue將消息丟失 consumer接收到消息后未消費(fèi)就宕機(jī) 針對這些問題,RabbitMQ分別給出了

    2024年02月07日
    瀏覽(30)
  • RabbitMQ保證消息的可靠性

    RabbitMQ保證消息的可靠性

    消息從發(fā)送,到消費(fèi)者接收,會經(jīng)理多個過程: 其中的每一步都可能導(dǎo)致消息丟失,常見的丟失原因包括: 發(fā)送時丟失: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消息到達(dá)exchange后未到達(dá)queue MQ宕機(jī),queue將消息丟失 consumer接收到消息后未消費(fèi)就宕機(jī) 針對這些問題,RabbitMQ分別給出了

    2024年02月19日
    瀏覽(23)
  • RabbitMQ如何保證消息可靠性

    RabbitMQ如何保證消息可靠性

    目錄 1、RabbitMQ消息丟失的可能性 1.1 生產(chǎn)者消息丟失場景 1.2 MQ導(dǎo)致消息丟失 1.3 消費(fèi)者丟失 2、如何保證生產(chǎn)者消息的可靠性 2.1 生產(chǎn)者重試機(jī)制 2.2 生產(chǎn)者確認(rèn)機(jī)制 2.3 實(shí)現(xiàn)生產(chǎn)者確認(rèn) 2.3.1 配置yml開啟生產(chǎn)者確認(rèn) 2.3.2 定義ReturnCallback 2.3.3 定義ConfirmCallback 3、MQ消息可靠性 3.1

    2024年02月20日
    瀏覽(24)
  • RabbitMQ高級篇---消息可靠性

    RabbitMQ高級篇---消息可靠性

    1、消息可靠性: 消息從發(fā)送到消費(fèi)者接受,會經(jīng)歷多個過程,每個消息傳遞的過程都可能導(dǎo)致消息的丟失: 常見的丟失原因: 發(fā)送時消息丟失原因: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消息到達(dá)exchange后未到達(dá)queue MQ宕機(jī),queue將消息丟失 consumer接收到消息后未消費(fèi)就宕機(jī) Rab

    2024年01月20日
    瀏覽(30)
  • 【RabbitMQ】之消息的可靠性方案

    【RabbitMQ】之消息的可靠性方案

    一、數(shù)據(jù)丟失場景 二、數(shù)據(jù)可靠性方案 1、生產(chǎn)者丟失消息解決方案 2、MQ 隊列丟失消息解決方案 3、消費(fèi)者丟失消息解決方案 MQ 消息數(shù)據(jù)完整的鏈路為 :從 Producer 發(fā)送消息到 RabbitMQ 服務(wù)器中,再由 Broker 服務(wù)的 Exchange 根據(jù) Routing_Key 路由到指定的 Queue 隊列中,最后投送到消

    2024年02月14日
    瀏覽(24)
  • RabbitMQ之消息的可靠性傳遞

    提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 RabbitMQ之消息的可靠性傳遞 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 在當(dāng)今的信息化時代,消息傳遞在企業(yè)級應(yīng)用和分布式

    2024年01月19日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包