🧑💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。

文章目录
🌟架构图

🌟application.properties
##----------rabbit配置--------------
spring.rabbitmq.host=49.233.48.98
spring.rabbitmq.port=5672
#需要手工创建虚拟主机
spring.rabbitmq.virtual-host=dev
spring.rabbitmq.username=admin
spring.rabbitmq.password=password
#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
spring.rabbitmq.listener.simple.acknowledge-mode=auto
#开启重试,消费者代码不能try catch捕获异常,要抛出异常
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=4
# 重试消息的时间间隔,5秒
spring.rabbitmq.listener.simple.retry.initial-interval=5000
🌟异常MQ配置
@Configuration@Slf4jpublicclassErrorRabbitMQConfig{/**
* 异常交换机
*/privateString errorExchange="error.exchange";/**
* 异常队列
*/privateString errorQueue="error.queue";privateString errorRoutingKey="error.routing.key";@AutowiredprivateRabbitTemplate rabbitTemplate;/**
* 创建异常交换机
* @return
*/@BeanpublicTopicExchangeerrorTopicExchange(){returnnewTopicExchange(errorExchange,true,false);}/**
* 创建异常队列
* @return
*/@BeanpublicQueueerrorQueue(){returnnewQueue(errorQueue,true);}/**
* 建立绑定关系
* @return
*/@BeanpublicBindingbindingErrorQueueAndExchange(){returnBindingBuilder.bind(errorQueue()).to(errorExchange()).with(errorRoutingKey);}/**
*消息重新发布到异常MQ
*/@BeanpublicMessageRecoverermessageRecoverer(){returnnewRepublishMessageRecoverer(rabbitTemplate,errorExchange,errorRoutingKey);}}
🌟异常MQ消费者
@Component@Slf4j@RabbitListener(queuesToDeclare ={@Queue("error.queue")})publicclassErrorMQListener{@RabbitHandlerprivatevoiderrorMessageHandler(EventMessage eventMessage,Message message,Channel channel)throwsIOException{
log.info("监听到消息:{}",message);//进行消息消费//发送邮箱通知、告警服务}}
🌟注意
- 业务MQ消费者代码逻辑记得往外抛异常,进行try-catch了也要往外抛。
- 消息消费重试,达到重试次数进入到异常交换机、队列。消息确认方式需要改为自动ack。
🌟写在最后
有关于项目实战之RabbitMQ重试机制进行消息补偿通知到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。

本文转载自: https://blog.csdn.net/2302_79094329/article/details/134813240
版权归原作者 DaenCode 所有, 如有侵权,请联系我们删除。
版权归原作者 DaenCode 所有, 如有侵权,请联系我们删除。