当前位置:   article > 正文

RabbitMQ消费者异常情况处理方案_rabbitmq消费端消费异常

rabbitmq消费端消费异常

目录

一、消费者异常情况处理

二、多次重试依然失败怎么处理


一、消费者异常情况处理

业务代码自己重试或者组件重试

RabbitMQ配置重试:

  1. #开启重试,消费者代码不能添加try catch捕获不往外抛异常
  2. spring.rabbitmq.listener.simple.retry.enabled=true
  3. #最大重试次数
  4. spring.rabbitmq.listener.simple.retry.max-attempts=4
  5. # 重试消息的时间间隔,5
  6. spring.rabbitmq.listener.simple.retry.initial-interval=5000

二、多次重试依然失败怎么处理

解决方式:RepublishMessageRecoverer

消息重试一定次数后,用特定的routingKey转发到指定的交换机中,方便后续排查和告警

注意: 消息消费确认使用自动确认方式

#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
  1. @Configuration
  2. @Data
  3. public class RabbitMQErrorConfig {
  4. private String shortLinkErrorExchange = "short_link.error.exchange";
  5. private String shortLinkErrorQueue = "short_link.error.queue";
  6. private String shortLinkErrorRoutingKey = "short_link.error.routing.key";
  7. @Autowired
  8. private RabbitTemplate rabbitTemplate;
  9. /**
  10. * 异常交换机
  11. * @return
  12. */
  13. @Bean
  14. public TopicExchange errorTopicExchange(){
  15. return new TopicExchange(shortLinkErrorExchange,true,false);
  16. }
  17. /**
  18. * 异常队列
  19. * @return
  20. */
  21. @Bean
  22. public Queue errorQueue(){
  23. return new Queue(shortLinkErrorQueue,true);
  24. }
  25. /**
  26. * 队列与交换机进行绑定
  27. * @return
  28. */
  29. @Bean
  30. public Binding BindingErrorQueueAndExchange(Queue errorQueue,TopicExchange errorTopicExchange){
  31. return BindingBuilder.bind(errorQueue).to(errorTopicExchange).with(shortLinkErrorRoutingKey);
  32. }
  33. /**
  34. * 配置 RepublishMessageRecoverer
  35. * 用途:消息重试一定次数后,用特定的routingKey转发到指定的交换机中,方便后续排查和告警
  36. *
  37. * 顶层是 MessageRecoverer接口,多个实现类
  38. *
  39. * @return
  40. */
  41. @Bean
  42. public MessageRecoverer messageRecoverer(){
  43. return new RepublishMessageRecoverer(rabbitTemplate,shortLinkErrorExchange,shortLinkErrorRoutingKey);
  44. }
  45. }

 消息重试4次后,被发送到了short_link.error.routing.key

 

剩下的就是业务监听这个 short_link.error.routing.key队列,处理发送邮件等信息告警了

  1. @Component
  2. @Slf4j
  3. @RabbitListener(queuesToDeclare = { @Queue("short_link.error.queue") })
  4. public class ShortLinkErrorMQListener {
  5. @RabbitHandler
  6. public void shortLinkHandler(EventMessage eventMessage, Message message, Channel channel) throws IOException {
  7. log.error("告警:监听到消息ShortLinkErrorMQListener eventMessage消息内容:{}",eventMessage);
  8. log.error("告警:Message:{}",message);
  9. log.error("告警成功,发送通知短信");
  10. }
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/974050
推荐阅读
相关标签
  

闽ICP备14008679号