
文章插图
请求结果:交换机存在,
触发了ConfirmCallback 函数式接口中的唯一抽象方法 confirm,
返回标识 true,发送到交换机成功;
没有绑定队列,
触发了ReturnCallback 函数式接口中的唯一抽象方法 returnedMessage,
返回说明 NO_ROUT,发送到队列失败;

文章插图
注意:如果没有到目标队列,就需要进行特殊处理的业务,比如给负责人发送信息或邮件;
3.2.5.3 交换机存在,且绑定了队列发起请求

文章插图
请求结果:交换机存在,且绑定了队列,
触发了ConfirmCallback 函数式接口中的唯一抽象方法 confirm,
返回标识 true,发送到交换机成功;
没有触发ReturnCallback 函数式接口中的唯一抽象方法 returnedMessage,
说明发送到队列成功;

文章插图
3.5 消息确认3.5.1 自动确认3.5.1.1 配置信息
# RabbitMQ配置spring:rabbitmq:# 消费消息确认配置-自动listener:simple:retry:enabled: true # 开启消费消息失败重试机制max-attempts: 5 # 指定重试的次数max-interval: 10000 # 最大重试间隔时间,单位毫秒,每次重试的间隔时间,不能比当前设置的值大,如果计算间隔时间是6s,最大时间时间5s,会用5秒initial-interval: 1000 # 重试间隔初始时间,单位毫秒multiplier: 2 #乘子;重试的间隔时间 * 乘子,就是下一次重试的时间间隔市场,即:1s,2s,4s,8s,16...3.5.1.2 消费者 模拟异常注意:测试时为了让消费者One一定接收到消息,所以注释掉消费者Two,这样才可以保证消费者One接收消息,然后触发异常,重试的效果;/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: Direct 直连模式消费者 One */@Slf4j@Component//指定接听的 消息队列 名字@RabbitListener(queues = RabbitMQConstant.RABBITMQ_DIRECT_QUEUE_NAME_KH96)public class RabbitMQDirectConsumerOne {/*** @author : huayu* @date: 1/11/2022* @param: [directMsgJson]* @return : void* @description : Direct 直连模式消费者One,消费信息*///指定消息队列中的消息,交给对应的方法处理@RabbitHandlerpublic void consumeOneDirectMsgFromDirectQueue(String directMsgJson){log.info("***** Direct直连模式,消费者One,消费消息:{} ******",directMsgJson);// TODO 核心业务逻辑处理//默认自动确认,模拟消费端消费消息,处理异常,自动重试int a = 10 / 0;}}3.5.1.3 请求方法/*** @author : huayu* @date: 3/11/2022* @param: [ackMsg]* @return : com.kgc.scd.uitl.RequestResult<java.lang.String>* @description : 测试 消费者自动 重试*/@GetMapping("/consumeAckAuto")public RequestResult<String> testRabbitMQConsumeAckAuto(@RequestParam String ackMsg){log.info("------- 直连 模式 测试Ack 自动 重试,发送消息 -------");//模拟发送直连消息//消费消息失败重试机制rabbitMQDirectProducer.sendDirectMsg2DirectExchange(RabbitMQConstant.RABBITMQ_DIRECT_EXCHANGE_KH96,RabbitMQConstant.RABBITMQ_DIRECT_ROUTING_KEY_KH96,JSON.toJSONString(ackMsg));return ResultBuildUtil.success("使用直连模式 消费确认-自动消费成功");}3.5.1.4 请求测试发起请求:
文章插图
请求结果:
一共重试了五次
间隔时间为1,2,4,8
(如果还有一次应该为10,因为最后一次计算时间16大于最大间隔时间10,按最大间隔时间10重试);

文章插图
经验总结扩展阅读
- 六盘水有什么特色美食 贵州六盘水最有名的七大美食
- 浙江丽水最有名的六大名菜
- 河南菜有哪些特色菜 河南最有名的六大特色名菜
- 北京菜有哪些特色菜 北京最有名的六大特色名菜
- 陕西菜有哪些特色菜 陕西最有名的六大特色名菜
- 2023年1月27日入宅好不好 2023年农历正月初六入宅吉日
- 2023年农历正月初六珠宝开光吉日 2023年1月27日珠宝开光黄道吉日
- 2023年1月27日祭祀吉日一览表 2023年农历正月初六祭祀吉日
- 2023年1月27日拜神行吗 2023年农历正月初六宜拜神吗
- 2023年1月27日请佛好吗 2023年农历正月初六请佛吉日
