RabbitMQ本身没有直接支持延迟队列的功能,但是可以通过配置死信队列和设置消息或队列的过期时间来模拟出延迟队列的功能。
RabbitMQ安装见博文:RabbitMQ安装及简单使用
1、rabbitmq控制台配置
在rabbitmq 控制台,新建exchange:delay.topic
Type:topic
新建死信(延迟)队列:delay.queue
配置Arguments如下:
x-message-ttl: | 50000 | Number | 延迟5s |
---|---|---|---|
x-dead-letter-exchange: | delay.topic | String | 死信exchange,延迟设定时间后,会将消息推送到该exchange |
x-dead-letter-routing-key: | routingkey.delay | String |
死信routingkey |
再新建队列 test.queue,
队列建好后,进入该队列,绑定如下exchange:
From exchange: delay.topic
Routing key: routingkey.delay
(该exchange与Routing key与设置死信队列x-dead-letter-exchange、x-dead-letter-routing-key 保持一致)
2、代码中使用
rabbitmq中配置好延迟队列delay.queue后,代码中将消息推送至delay.queue,5s后,消息会推送至
绑定如下exchange的队列
exchange: delay.topic Routing key: routingkey.delay
即test.queue, 监听test.queue,5s后即可获取到消息。