Bootstrap

rabbitMq-TTL、DLX实现延时队列

在第一篇rabbitMq的交换机博客里穿插了许多api介绍,在声明队列时可以指定x-message-ttl消息过期时间、x-dead-letter-exchange死信交换机和x-dead-letter-routing-key死信路由键,在发送消息时也可以指定消息的过期时间。rabbitMq没有提供延时队列功能,但是我们可以利用TTL(过期时间)和(DLX)死信交换机来实现延时队列功能。

基于队列和基于消息的TTL

TTL是time to live 的简称,顾名思义指的是消息的存活时间。rabbitMq可以从两种维度设置消息过期时间,分别是队列和消息本身。

队列消息过期时间-Per-Queue Message TTL:
通过设置队列的x-message-ttl参数来设置指定队列上消息的存活时间,其值是一个非负整数,单位为微秒。不同队列的过期时间互相之间没有影响,即使是对于同一条消息。队列中的消息存在队列中的时间超过过期时间则成为死信。

       Map<String, Object> args = new HashMap<String, Object>();
      args.put("x-message-ttl", 60000);
      channel.queueDeclare("myqueue", false, 
;