• 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。
     
    道法自然
  • 相关阅读:
    还记得吗
    PAT A 1065. A+B and C (64bit) (20)
    畅通project(杭电1863)
    cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第七步---英雄要升级&属性--解析csv配置文件
    热烈祝贺Polymer中文组织站点上线
    具体解释HTML中的window对象和document对象
    oc15--文档安装
    oc14--匿名对象
    oc13--pragma mark
    oc12--对象作为参数
  • 原文地址:https://www.cnblogs.com/jiduoduo/p/14900660.html
Copyright © 2020-2023  润新知