利用TTL结合死信交换机,我们实现了消息发出后,消费者延迟收到消息的效果。这种消息模式就称为延迟队列(Delay Queue)模式。
延迟队列的使用场景包括:
- 延迟发送短信
- 用户下单,如果用户在15 分钟内未支付,则自动取消
- 预约工作会议,20分钟后自动通知所有参会人员
因为延迟队列的需求非常多,所以 RabbitMQ 的官方也推出了一个插件,原生支持延迟队列效果。
这个插件就是 DelayExchange 插件。参考RabbitMQ的插件列表页面:
使用方式可以参考官网地址:
1. 安装 DelayExchange 插件
2. DelayExchange 原理
DelayExchange 需要将一个交换机声明为 delayed 类型。当我们发送消息到 delayExchange 时,流程如下:
- 接收消息
- 判断消息是否具备x-delay属性
- 如果有x-delay属性,说明是延迟消息,持久化到硬盘,读取x-delay值,作为延迟时间
- 返回routing not found结果给消息发送者
- x-delay 时间到期后,重新投递消息到指定队列
3. 使用
插件的使用也非常简单:声明一个交换机,交换机的类型可以是任意类型,只需要设定 delayed 属性为true 即可,然后声明队列与其绑定即可。
3.1 声明DelayExchange交换机
基于注解方式(推荐):
也可以基于@Bean的方式:
3.2 发送消息
发送消息时,一定要携带x-delay属性,指定延迟的时间:
4. 总结
延迟队列插件的使用步骤包括哪些?
•声明一个交换机,添加 delayed 属性为true
•发送消息时,添加 x-delay 头,值为超时时间