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

rabbitmq消息確認(rèn)機制

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

rabbitmq手動確認(rèn)機制,rabbitmq,ruby,分布式

一、發(fā)送端消息確認(rèn)

(1)publish ===> broker
只要broker收到消息,就會執(zhí)行 confirmCallback

# 開啟發(fā)送端消息抵達Broker確認(rèn) 
spring.rabbitmq.publisher-confirms=true

(2)exchange ===> queue
如果exchange有消息沒有成功發(fā)送至queue,就會執(zhí)行RuturnCallback,例:routing key錯誤導(dǎo)致發(fā)送消息到隊列失敗

# 開啟發(fā)送端消息抵達Queue確認(rèn)
spring.rabbitmq.publisher-returns=true
# 只要消息抵達Queue,就會異步發(fā)送優(yōu)先回調(diào)returnfirm
spring.rabbitmq.template.mandatory=true

(3)RabbitmqConfig

/**
     * 定制RabbitTemplate
     * 1、服務(wù)收到消息就會回調(diào)
     *      1、spring.rabbitmq.publisher-confirms: true
     *      2、設(shè)置確認(rèn)回調(diào)
     * 2、消息正確抵達隊列就會進行回調(diào)
     *      1、spring.rabbitmq.publisher-returns: true
     *         spring.rabbitmq.template.mandatory: true
     *      2、設(shè)置確認(rèn)回調(diào)ReturnCallback
     *
     * 3、消費端確認(rèn)(保證每個消息都被正確消費,此時才可以broker刪除這個消息)
     *
     */
    // @PostConstruct  //MyRabbitConfig對象創(chuàng)建完成以后,執(zhí)行這個方法
    public void initRabbitTemplate() {

        /**
         * 1、只要消息抵達Broker就ack=true
         * correlationData:當(dāng)前消息的唯一關(guān)聯(lián)數(shù)據(jù)(這個是消息的唯一id)
         * ack:消息是否成功收到
         * cause:失敗的原因
         */
        //設(shè)置確認(rèn)回調(diào)
        rabbitTemplate.setConfirmCallback((correlationData,ack,cause) -> {
            System.out.println("confirm...correlationData["+correlationData+"]==>ack:["+ack+"]==>cause:["+cause+"]");
        });


        /**
         * 只要消息沒有投遞給指定的隊列,就觸發(fā)這個失敗回調(diào)
         * message:投遞失敗的消息詳細(xì)信息
         * replyCode:回復(fù)的狀態(tài)碼
         * replyText:回復(fù)的文本內(nèi)容
         * exchange:當(dāng)時這個消息發(fā)給哪個交換機
         * routingKey:當(dāng)時這個消息用哪個路郵鍵
         */
        rabbitTemplate.setReturnCallback((message,replyCode,replyText,exchange,routingKey) -> {
            System.out.println("Fail Message["+message+"]==>replyCode["+replyCode+"]" +
                    "==>replyText["+replyText+"]==>exchange["+exchange+"]==>routingKey["+routingKey+"]");
        });
    }

二、消費端消息確認(rèn)

rabbitmq手動確認(rèn)機制,rabbitmq,ruby,分布式
(1) queue ===> consumer
默認(rèn)是ack,consumer只要拿到消息就會自動確認(rèn),服務(wù)端就會刪除queue中的消息,如果業(yè)務(wù)出現(xiàn)問題只有部分消息簽收成功,剩余未簽收的消息也會刪除,為了能保存消息,需要設(shè)置為客戶端手動確認(rèn)簽收

#手動簽收ack
spring.rabbitmq.listener.simple.acknowledge-mode=manual

(2) 簽收消息channel.basicAck(自增id,是否批量)

設(shè)置手動ack簽收之后,如果有消息沒有簽收(簽收失?。?,會顯示未簽收
rabbitmq手動確認(rèn)機制,rabbitmq,ruby,分布式

自增id:2,簽收完成2
自增id:4,簽收完成4

如果服務(wù)重啟,未簽收的消息就會加入queue重新發(fā)送:Unacked ===> Ready

rabbitmq手動確認(rèn)機制,rabbitmq,ruby,分布式

(3)拒簽 channel.basicNack(自增id,是否批量,是否重新加入隊列)
requeue=true 拒簽的消息會加入queue重新發(fā)送
requeue=false 拒簽的消息會直接丟棄,不會加入隊列重新發(fā)送

@RabbitListener(queues = {"durunwu.queue"})
@Service("orderService")
public class OrderServiceImpl extends ServiceImpl<OrderDao, OrderEntity> implements OrderService {

    @RabbitHandler
    public void msgListener2(Message message, OrderItemEntity orderItemEntity, Channel channel) throws IOException {
        //順序id,channel內(nèi)按順序自增了
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        if (deliveryTag % 2 == 0){
            //basicAck(long deliveryTag, boolean multiple)
            //channel內(nèi)按順序自增 
            channel.basicAck(deliveryTag,false);
            System.out.println("自增id:"+deliveryTag+",簽收完成" + orderItemEntity.getId());
        }else {
            //basicNack(long deliveryTag, boolean multiple, boolean requeue)
            channel.basicNack(deliveryTag,false,true);
            System.out.println("自增id:"+deliveryTag+",拒簽"+orderItemEntity.getId());
        }

    }

}

控制臺打印

自增id:1,拒簽1
自增id:2,簽收完成2
自增id:3,拒簽3
自增id:4,簽收完成4
自增id:5,拒簽5
自增id:6,簽收完成1
自增id:7,拒簽3
自增id:8,簽收完成5
自增id:9,拒簽3
自增id:10,簽收完成3

(4)整合業(yè)務(wù)
如何簽收?
業(yè)務(wù)完成 ===> 簽收:basicAck(deliveryTag, false)
業(yè)務(wù)未完成 ===> 拒簽:basicNack(deliveryTag, false, true)文章來源地址http://www.zghlxwxcb.cn/news/detail-637645.html

到了這里,關(guān)于rabbitmq消息確認(rèn)機制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • RabbitMQ:高效傳遞消息的魔法棒,一篇帶你助力構(gòu)建可靠的分布式系統(tǒng)(上篇)

    RabbitMQ:高效傳遞消息的魔法棒,一篇帶你助力構(gòu)建可靠的分布式系統(tǒng)(上篇)

    MQ是消息隊列( Message Queue )的縮寫,是一種在應(yīng)用程序之間傳遞消息的技術(shù)。通常用于 分布式系統(tǒng) 或 異步通信 中,其中 發(fā)送者 將消息放入隊列,而 接收者 從隊列中獲取消息。 這種異步通信模式允許發(fā)送者和接收者在不需要實時連接的情況下進行通信,從而提高了應(yīng)用

    2024年02月15日
    瀏覽(31)
  • RabbitMQ--基礎(chǔ)--8.1--消息確認(rèn)機制--接受確認(rèn)機制(ACK)

    RabbitMQ--基礎(chǔ)--8.1--消息確認(rèn)機制--接受確認(rèn)機制(ACK)

    代碼位置 消費者收到Queue中的消息,但沒有處理完成就宕機的情況,這種情況下就可能會導(dǎo)致消息丟失。 為了避免這種情況發(fā)生,我們可以要求消費者在消費完消息后發(fā)送一個回執(zhí)給RabbitMQ,RabbitMQ收到消息回執(zhí)(Message acknowledgment)后才將該消息從Queue中移除。 如果RabbitMQ沒有收

    2024年02月10日
    瀏覽(18)
  • RabbitMQ 消息確認(rèn)機制

    為了保證消息從隊列可靠的到達消費者,RabbitMQ 提供了消息確認(rèn)機制(Message Acknowledgement)。消費者在訂閱隊列時,可以指定 autoAck 參數(shù),當(dāng) autoAck 參數(shù)等于 false 時,RabbitMQ 會等待消費者顯式地回復(fù)確認(rèn)信號后才從內(nèi)存(或者磁盤)中移除消息(實際上是先打上刪除標(biāo)記,之

    2024年02月15日
    瀏覽(23)
  • rabbitmq消息確認(rèn)機制

    rabbitmq消息確認(rèn)機制

    (1) publish === broker 只要broker收到消息,就會執(zhí)行 confirmCallback (2) exchange === queue 如果exchange有消息沒有成功發(fā)送至queue,就會執(zhí)行RuturnCallback,例:routing key錯誤導(dǎo)致發(fā)送消息到隊列失敗 (3)RabbitmqConfig (1) queue === consumer 默認(rèn)是ack,consumer只要拿到消息就會自動確認(rèn),服務(wù)端

    2024年02月13日
    瀏覽(19)
  • RabbitMq 消息確認(rèn)機制詳解

    RabbitMq 消息確認(rèn)機制詳解

    目錄 1.消息可靠性 1.1.生產(chǎn)者消息確認(rèn) 1.1.1.修改配置 1.1.2.定義Return回調(diào) 1.1.3.定義ConfirmCallback 1.2.消息持久化 1.2.1.交換機持久化 1.2.2.隊列持久化 1.2.3.消息持久化 1.3.消費者消息確認(rèn) 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消費失敗重試機制 1.4.1.本地重試 1.4.2.失敗策略 1.5.總結(jié)

    2024年01月21日
    瀏覽(17)
  • 8. springboot + rabbitmq 消息發(fā)布確認(rèn)機制

    8. springboot + rabbitmq 消息發(fā)布確認(rèn)機制

    在 RabbitMQ之生產(chǎn)者發(fā)布確認(rèn)原理章節(jié)已經(jīng)介紹了rabbitmq生產(chǎn)者是如何對消息進行發(fā)布確認(rèn)保證消息不丟失的。本章節(jié)繼續(xù)看下springboot整合rabbitmq后是如何保證消息不丟失的。 消息正常是通過生產(chǎn)者生產(chǎn)消息傳遞到交換機,然后經(jīng)過交換機路由到消息隊列中,最后消費者消費,

    2023年04月25日
    瀏覽(20)
  • Rabbitmq入門與應(yīng)用(六)-rabbitmq的消息確認(rèn)機制

    Rabbitmq入門與應(yīng)用(六)-rabbitmq的消息確認(rèn)機制

    確認(rèn)消息是否發(fā)送給交換機 配置 編碼RabbitTemplate.ConfirmCallback ConfirmCallback 是一個回調(diào)接口,消息發(fā)送到 Broker 后觸發(fā)回調(diào),確認(rèn)消息是否到達 Broker 服務(wù)器, 也就是只確認(rèn)是否正確到達 Exchange 中。 在配置類中編碼確認(rèn)回調(diào)函數(shù)。tips: 設(shè)置 rabbitTemplate.setMandatory(true); 配置類

    2024年02月20日
    瀏覽(15)
  • 分布式消息隊列RabbitMQ-Linux下服務(wù)搭建,面試完騰訊我才發(fā)現(xiàn)這些知識點竟然沒掌握全

    分布式消息隊列RabbitMQ-Linux下服務(wù)搭建,面試完騰訊我才發(fā)現(xiàn)這些知識點竟然沒掌握全

    vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 5.修改配置文件 這里面修改{loopback_users, [“guest”]}改為{loopback_users, []} {application, rabbit, %% - - erlang - - [{description, “RabbitMQ”}, {id, “RabbitMQ”}, {vsn, “3.6.5”}, {modules, [‘background_gc’,‘delegate’,‘delegate_sup’,‘dtree’,‘file_han

    2024年04月14日
    瀏覽(27)
  • RabbitMQ的幾種消息確認(rèn)機制詳細(xì)介紹

    RabbitMQ的幾種消息確認(rèn)機制詳細(xì)介紹

    前言:大家好,我是小威,24屆畢業(yè)生,在一家滿意的公司實習(xí)。本篇文章將詳細(xì)介紹RabbitMQ的幾種消息確認(rèn)機制。 如果文章有什么需要改進的地方還請大佬不吝賜教 ????。 小威在此先感謝各位大佬啦~~???? ??個人主頁:小威要向諸佬學(xué)習(xí)呀 ??個人簡介:大家好,我是

    2023年04月25日
    瀏覽(21)
  • 「RabbitMQ」實現(xiàn)消息確認(rèn)機制以確保消息的可靠發(fā)送、接收和拒收

    「RabbitMQ」實現(xiàn)消息確認(rèn)機制以確保消息的可靠發(fā)送、接收和拒收

    目錄 介紹 方案 配置手動確認(rèn) 使用 「Bean?」 配置RabbitMQ的屬性 確定消費、拒絕消費、拒絕消費進入死信隊列 模擬生產(chǎn)者發(fā)送消息① ????????RabbitMQ 的消息確認(rèn)機制應(yīng)用場景非常廣泛,尤其是在需要確保消息可靠性和避免消息丟失的場合下更為重要,例如:金融系統(tǒng)、電

    2024年02月08日
    瀏覽(51)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包