说明
本篇博文主要记录了springboot中rabbitmq的使用。使用rabbitmq实现消息消费处理失败后的延迟重试。
正文
rabbitmq不支持延迟任务,所以使用rabbitmq的支持的其他特性来实现延迟任务。这里主要使用了消息的有效期(TTL)和死信路由DLX。消息的有效期可以通过队列设置,也可以通过设置消息的相关属性。死信路由的本质是一个Topic路由器,通过在创建缓冲队列时声明"x-dead-letter-exchange"属性,将缓冲队列与DLX绑定,当消息在缓冲队列到期时,会自动通过DLX路由到与消息携带的路由关键字(routingKey)匹配的队列中。
简单来说,实现消息的失败重试的总体流程为:消息生产者将消息发送到普通队列,消费者接受到后进行处理,若处理失败,将该消息发送到缓冲队列,消息在队列到期后会自动的被发送到普通队列,再次消费。原理图如下:
1.配置类MQConfig
配置类用来创建生产者,消费者,创建队列,交换机和绑定关系。
@Configuration
public class MQConfig {
//创建消费者
@Bean