RabbitTemplate.ReturnCallback已过时+生产者发送回调

Posted 道法自然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

 

 

以上是关于RabbitTemplate.ReturnCallback已过时+生产者发送回调的主要内容,如果未能解决你的问题,请参考以下文章