• 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);
            };
        }
    }
  • 相关阅读:
    面向对象编程
    多任务-线程
    浅析IoC框架
    Android:关于声明文件中android:process属性说明
    Android闹钟设置的解决方案
    【转】RelativeLayout和LinearLayout及FrameLayout性能分析
    SurfaceView浅析
    SQLite Vacuum
    SQLiteStatement优化SQLite操作
    基于Android SQLite的升级详解
  • 原文地址:https://www.cnblogs.com/geekdc/p/13539764.html
Copyright © 2020-2023  润新知