springboot2.x集成RabbitMQ实现消息发送确认 与 消息接收确认(ACK)

前言

首先看回调机制:

  • 消息不管是否投递到交换机都进行ConfirmCallback回调,投递成功ack=true,否则为false
  • 交换机匹配到队列成功则不进行ReturnCallback回调,否则先进行ReturnCallback回调再进行ConfirmCallback回调
  • 如果消息成功投递到交换机,但没匹配到队列,则ConfirmCallback回调ack仍为true
我的springboot版本springBootVersion = '2.2.1.RELEASE'

ConfirmCallback

首先需要在yml配置:

publisher-confirm-type: correlated
    /**
     * 测试消息确认回调(必须在yml配置publisher-confirm-type: correlated)
     */
    @GetMapping("sendConfirmCallback")
    public Resp sendConfirmCallback() {
        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
            System.out.println("ack:" + ack);
            if (!ack) {
                System.out.println("异常处理");
            }
        });
        amqpTemplate.convertAndSend("test-queue", "测试ack确认模式");
        return Resp.success("ok", null);
    }

ReturnCallback

需要在yml配置

publisher-returns: true

    @Autowired
    private AmqpTemplate amqpTemplate;
    @Resource
    private RabbitTemplate rabbitTemplate; 

   /**
     * 启动消息失败返回,比如路由不到队列时触发回调
     * 测试发布回调(必须在yml配置publisher-returns: true)
     */
    @GetMapping("sendReturnCallback")
    public Resp sendReturnCallback() {
        RabbitTemplate.ReturnCallback returnCallback = (message, replyCode, replyText, exchange, routingKey) -> {
            System.out.println("========returnCallback=============");
            System.out.println("========returnCallback=============");
        };
        rabbitTemplate.setReturnCallback(returnCallback);
        amqpTemplate.convertAndSend("test-", "测试发布回调模式");
        return Resp.success("ok", null);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值