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

RabbitMQ消费者异常情况处理方案,第1张

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

目录

一、消费者异常情况处理

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


一、消费者异常情况处理

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

RabbitMQ配置重试:

#开启重试,消费者代码不能添加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
二、多次重试依然失败怎么处理

解决方式:RepublishMessageRecoverer

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

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

#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
@Configuration
@Data
public class RabbitMQErrorConfig {

    private String shortlinkErrorExchange = "short_link.error.exchange";

    private String shortlinkErrorQueue = "short_link.error.queue";

    private String shortlinkErrorRoutingKey = "short_link.error.routing.key";

    @Autowired
    private RabbitTemplate rabbitTemplate;

    
    @Bean
    public TopicExchange errorTopicExchange(){
        return new TopicExchange(shortlinkErrorExchange,true,false);
    }

    
    @Bean
    public Queue errorQueue(){
        return new Queue(shortlinkErrorQueue,true);
    }

    
    @Bean
    public Binding BindingErrorQueueAndExchange(Queue errorQueue,TopicExchange errorTopicExchange){
        return BindingBuilder.bind(errorQueue).to(errorTopicExchange).with(shortlinkErrorRoutingKey);
    }


    
    @Bean
    public MessageRecoverer messageRecoverer(){
        return new RepublishMessageRecoverer(rabbitTemplate,shortlinkErrorExchange,shortlinkErrorRoutingKey);
    }

}

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

 

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

@Component
@Slf4j
@RabbitListener(queuesToDeclare = { @Queue("short_link.error.queue") })
public class ShortlinkErrorMQListener {

    @RabbitHandler
    public void shortlinkHandler(EventMessage eventMessage, Message message, Channel channel) throws IOException {
        log.error("告警:监听到消息ShortlinkErrorMQListener eventMessage消息内容:{}",eventMessage);
        log.error("告警:Message:{}",message);
        log.error("告警成功,发送通知短信");

    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5700435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存