Rabbitmq發送方消息確認


一、發送方消息確認點

都知道發送方消息確認,有兩個地方

  • 消息發送到broker的消息確認回調,發送到服務器,觸發confirmCallBack ,ack=true 否 false
  • 消息通過交換器綁定到隊列的消息確認回調,發現沒有與之綁定的隊列時,觸發returnCallBack

二、配置

2.1、yml

 #rabbitmq
  rabbitmq:
    host: 192.168.99.12
    port: 5672
    username: guest
    password: guest
    # 發送確認
    publisher-confirms: true
    # 路由失敗回調
    publisher-returns: true
    template:
      # 必須設置成true 消息路由失敗通知監聽者,false 將消息丟棄
      mandatory: true

2.2、回調配置

回調配置是配置給RabbitTemplate的,一個是confirmCallBack一個是returnCallBack,根據面向搜索引擎編程規則,網上搜,你會發現零零散散,殘缺不齊,還是得自己造輪子,不BB了,上代碼

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;

/**
 * rabbitmq 模版配置發送確認
 * @author  DUCHONG
 * @since 2020-08-21 10:15:31
 */
@Configuration
@Slf4j
public class RabbitTemplateConfig {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @PostConstruct
    public void setConfirmAndReturnCallBack() {
        //設置ConfirmCallback
        rabbitTemplate.setConfirmCallback(confirmCallback());
        //設置ReturnCallback
        rabbitTemplate.setReturnCallback(returnCallback());
    }


    /**
     * ReturnCallback接口用於實現消息發送到RabbitMQ交換器,但無相應隊列與交換器綁定時的回調
     message   投遞失敗的詳細信息
     replyCode   回復的狀態碼
     replyText   回復的文本內容
     exchange     這個消息發送給哪個交換機
     routingKey    這個消息用的哪個路由鍵
     */
    RabbitTemplate.ReturnCallback returnCallback(){
        return (message, replyCode, replyText, exchange, routingKey) -> {
            //業務邏輯
            log.info("returnCallback---->message---{},-->replyCode---{},-->replyText---{},-->exchange---{},-->routingKey---{}", message, replyCode, replyText, exchange, routingKey);
        };
    }

    /**
     * ConfirmCallback接口用於實現消息發送到RabbitMQ交換器后接收ack回調
     correlationData 消息的唯一id,給每一條信息添加一個dataId,放在CorrelationData,這樣在RabbitConfirmCallback返回失敗的時候可以知道是哪個消息失敗
     ack 消息是否成功收到 true 收到 false 未收到
     cause  失敗原因
     */
    RabbitTemplate.ConfirmCallback confirmCallback(){
        return (correlationData, ack, cause) ->{
            //業務邏輯
            log.info("confirmCallback---->correlationData---{},-------->ack---{},-------->cause---{}",correlationData,ack,cause);
        };
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM