• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
毛逢芳
博客园    首页    新随笔    联系   管理    订阅  订阅

RabbitMQ-消息可靠投递-Confirm与Return

RabbitMQ消息投递路径:producer->rabbitmq broker->exchange->queue->consumer

    消息从producer到exchange,返回一个ConfirmCallBack

    消息从exchange到queue失败,返回一个ReturnCallBack

一、Confirm消息确认模式

/**
* confirm模式
* 步骤:1、ConnectionFactory中开启publisher-confirms="true"
* 2、定义ConfirmCallBack回调函数
*/
@Test
public void testConfirm(){
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback(){
/**
*
* @param correlationData 相关配置信息
* @param ack 交换机是否成功接收信息
* @param cause 接收信息失败原因
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("confirm方法被执行了...");
if(ack){
System.out.println("接收成功:"+cause);
}else {
System.out.println("接收失败:"+cause);
} }
});
rabbitTemplate.convertAndSend("exchange_confirm","confirm","message test confirm ... ");
}

二、Return消息回退模式

/**
* return模式
* 步骤:1、ConnectionFactory中开启publisher-returns="true"
* 2、定义ReturnCallBack回调函数
* 3、设置Exchange处理消息的模式:如果交换机处理消息到queue失败,默认丢弃消息
*/
@Test
public void testReturn(){
//设置Exchange处理消息的模式
rabbitTemplate.setMandatory(true);

rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
/**
*
* @param message 消息对象
* @param replyCode 错误码
* @param replyText 错误信息
* @param exchange 交换机
* @param routingKey 路由键
*/
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
System.out.println("return方法被执行了");
System.out.println(message);
System.out.println(replyCode);
System.out.println(replyText);
System.out.println(exchange);
System.out.println(routingKey);
}
});
rabbitTemplate.convertAndSend("exchange_confirm","confirm_1","message test return ...");
}
posted @ 2020-11-19 12:01  那棵tree看起来生气了  阅读(231)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3