Spring Boot 整合——RabbitMQ配置消息确认回调、消息转换以及消息异常处理

消息回调

消息队列在实际运用中,作为消息的生产者,很多时候我们需要确认消息是否成功发送到了mq中。同时我们还需要知道,假如消息出现异常时的异常情况。为了满足这个业务场景,我们就需要配置消息回调。

开启消息回调

为了保证消息生产者能够收到消息的回调信息,我么需要修改以下配置,只有添加了下面的配置,才能保证添加相关代码后可以收到系统的回复。

spring:
  rabbitmq:
    # 开启发送确认
    publisher-confirms: true
    # 开启发送失败退回
    publisher-returns: true

目前回调存在ConfirmCallbackReturnCallback两者。他们的区别在于

  1. 如果消息没有到exchange,则ConfirmCallback回调,ack=false,
  2. 如果消息到达exchange,则ConfirmCallback回调,ack=true
  3. exchange到queue成功,则不回调ReturnCallback

rabbitMQ 消息生产者发送消息的流程

生产者 rabbitMQ 发送消息 返回ack确认消息 调用confirmCallback、ReturnCallback函数 生产者 rabbitMQ

配置消息回调

ConfirmCallback的回调

/**
 * 消息发送成功的回调
 * 需要开启
 * # 开启发送确认
 * publisher-confirms: true
 * @author daify
 * @date 2019-07-22 15:44
 **/
@Slf4j
public class RabbitConfirmCallBack 
        implements RabbitTemplate.ConfirmCallback {
   
   
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
   
   
        log.info("消息唯一标识: {}", correlationData);
        log.info("确认状态: {}", ack);
        log.info("造成原因: {}", cause);
    }
}

ReturnCallback的回调

/**
 * 发生异常时的消息返回提醒
 * 需要开启
 * # 开启发送失败退回
 * publisher-returns: true
 * @author daify
 * @date 2019-07-22 15:45
 **/
@Slf4j
public class RabbitReturnCallback 
        implements RabbitTemplate.ReturnCallback {
   
   
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
   
   
        log.info("消息主体: {}", message);
        log.info("回复编码: {}", replyCode);
        log.info("回复内容: {}", replyText);
        log.info("交换器: {}", exchange);
        log.info("路由键: {}", routingKey);
    }
}

将回调配置到模板中

@Configuration
@AllArgsConstructor
public class RabbitInitializingBean implements InitializingBean {
   
   

    private RabbitTemplate rabbitTemplate;

    @Override
    public void afterPropertiesSet() throws Exception {
   
   
        rabbitTemplate.setConfirmCallback(new RabbitConfirmCallBack());
        rabbitTemplate.setReturnCallback(new RabbitReturnCallback());
    }
}

配置其exchange和queue

我们现在设计这样一种测试场景。这样send3将会触发ReturnCallback,send2的ack应该为false

评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大·风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值