rabbitmq 延时消息实现
- TTL(Time To Live) 发送TLL消息到死信队列,死信队列不配置消费者,死信队列将消息转发到另一个立即消费的队列上,配置好立即消费的消费者处理延时消息。
- 安装rabbitmq 插件 rabbitmq_delayed_message_exchange ,发送延时消息,配置延时消费的消费者,处理超时未支付的订单
TTL方式的缺点:后面的消息在延时队列中时间如果小于前面的队列等待时间也不会先执行,会按照队列的方式一个一个出队
插件实现代码(此处使用springmvc配置方式):
1.实例化一个队列
<rabbit:queue name="dlmm_dynamic_delay_queue" auto-delete="false" durable="true" exclusive="false" auto-declare="true"/>
2.实例化一个exchange. DynamicExchangeConfig.java
并将队列绑定到该exchange
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.ste