RabbitTemplate.ReturnCallback已過時+生產者發送回調


生產者發送消息的時候,需要通過exchange+queue,那么這個過程中就可能出現收不到或者是路由不成功的情況。

就需要通過發送返回狀態來進行,完整性的處理。

 

一般我們在處理實際業務的時候,流程如下:

第一步:先把一些業務處理寫入數據庫

第二步:發送(Producer==>Exchange==>Queue==>Consumer)

 

能不能發送成功,就需要通過回調來了。

1、配制里加一下。

spring.rabbitmq.publisher-confirm-type=correlated
spring.rabbitmq.publisher-returns=true

2、調用包,並且實現。

import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback;
import org.springframework.amqp.rabbit.core.RabbitTemplate.ReturnsCallback;
ReturnCallback(過時了) ==> ReturnsCallback

@Component
public class mqProducer implements ConfirmCallback,ReturnsCallback {
/**
* 不管成功於否,都會調用。
*/ @Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) { System.err.println("correlationData: " + correlationData);
    if(ack){
       //成功,處理寫庫,更新業務。
    }else{
       //失敗
    } }
/** * 如果消息未從路由成功發送到隊列那么會走這個回調,這里會把消息的整個明細返回
   * 也就是說出錯了,才會調用哦。
*/ @Override public void returnedMessage(ReturnedMessage returned) { System.err.println("ReturnedMessage: " + returned); } }

調用:

rabbitTemplate.setConfirmCallback(this);
        rabbitTemplate.setReturnsCallback(this);
        CorrelationData correlationData = new CorrelationData("id_"+System.currentTimeMillis()+"");
        rabbitTemplate.convertAndSend("exchange1", "queue1", msg, correlationData);
//只要將queue改為不存在,就可以成功調用 returnedMessage。

 

 


免責聲明!

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



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