项目背景:
根据订单不同的事件做相对应的业务处理。比如:非预付费的订单48小时自动现金结清逻辑处理。经讨论决定使用rabbitMq的延迟队列方式实现。
什么是rabbitMq延迟队列:
延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。
延迟队列原理:
Rabbitmq本身是没有延迟队列的,只能通过Rabbitmq本身队列的特性来实现,实现延迟队列,需要使用Rabbitmq的死信交换机(Exchange)和消息的存活时间TTL(Time To Live)。
java代码实现:
1、pom引进依赖
2、RabbitMqConfig基础配置:
对于springboot项目,可在application.yml配置即可,启动时候会自动读取相对应的信息配置。本文采用文件加载方式。配置rabbitMq连接信息如下:
需求需要消息处理每次需要多少间隔时间或者最大重试次数等,配置如下所示:
3、延迟队列配置,包括建立死信交换机,死信队列绑定
4、TTL队列中的消息过期后,转发目标队列;qeue为队列名称,data为message消息,ttl为设置的过期时间。
5、监听转发队列,进行业务处理
多延迟队列实现:
对于需要配置多个延迟队列,只需要配置多个DelayXXXConfig文件即可。
rabbitMq页面配置效果:
结论:
根据延迟时间配置达到相对应的延迟效果。
本文只记录描述rabbitMq延迟队列的实现方式。