前言
之前写了两篇使用Java和RabbitMQ实现延迟队列功能的实践文章,分别对应两种不同的实现方式。
RabbitMQ实现延迟队列的两种方式如下。
1、使用RabbitMQ的延迟插件。
如何使用Java和RabbitMQ实现延迟队列?-CSDN博客
2、使用死信交换机(Dead-Letter-Exchange)。
如何使用Java和RabbitMQ实现延迟队列(方式二)?-CSDN博客
今天来讲讲两种方式的差异。
一、使用RabbitMQ的延迟插件
1、需要额外下载延迟插件并且启用插件功能。
2、创建一个交换机,类型为x-delayed-message。
3、创建一个队列,绑定到相应的交换机。
4、监听队列。
5、往相应的交换机和路由发送消息即可实现延迟功能。
MessageProperties messageProperties = new MessageProperties();
messageProperties.setHeader("x-delay", ttlInMilliseconds);
Message msg = MessageBuilder.withBody(message.getBytes()).andProperties(messageProperties).build();
二、使用死信交换机(Dead-Letter-Exchange)
1、不需要插件支持。
2、创建一个死信交换机,类型为direct。
3、创建一个死信队列,绑定到死信交换机。
4、创建一个延迟交换机,类型为direct。
5、创建一个延迟队列,绑定到延迟交换机,并且设置属性如下。
- x-dead-letter-exchange = 死信交换机
- x-dead-letter-routing-key = 死信路由
- x-message-ttl = 设置默认 TTL(毫秒),可选配置
6、监听死信队列。
7、往延迟交换机和路由发送消息。
MessageProperties messageProperties = new MessageProperties();
messageProperties.setExpiration(Long.toString(ttlInMilliseconds));
Message msg = MessageBuilder.withBody(message.getBytes()).andProperties(messageProperties).build();
总结
今天主要讲RabbitMQ实现延迟队列的两种方式有哪些差异,主要体现在下面三个方面。
1、是否需要插件支持。
2、交换机类型。
3、发送消息的属性。
最后因本人能力有限,有什么不对的地方望各位大佬指出好让我改进,多多包含,谢谢大家。