TTL说明
RabbitMQ支持三种方式
- Per-Queue Message TTL (为进入队列的每一条消息设置一个TTL)
- Queue TTL (队列的TTL,如果在设置的TTL时间内,没有消费者连接,没有消息发送,RabbitMQ会默认其是将要抛弃不用的,会考虑在TTL到期后删除掉该队列)
- Per-Message TTL (给消息设置TTL,如果设置了就有,没设置就没有)
Per-Queue Message TTL
###配置方式一 我们通过类似配置死信的方式来配置Per-Queue Message TTL。
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);
###配置方式二 通过设置policy策略来指定(可以直接通过web界面来操作)。
rabbitmqctl set_policy TTL ".*" '{"message-ttl":60000}' --apply-to queues
界面操作
Queue TTL
###配置方式一 通过代码在声明队列的时候指定。
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-expires", 900000);
channel.queueDeclare("myqueue", false, false, false, args);
###配置方式二 通过设置policy策略来指定(可以直接通过web界面来操作)。
rabbitmqctl set_policy expiry ".*" '{"expires":900000}' --apply-to queues
Per-Message TTL
指定TTL
在发送的时候指定properties来指定。如果使用的是Spring AMQP,那么可以通过使用MessageProperties
来进行指定。
byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties();
properties.setExpiration("60000");
channel.basicPublish("my-exchange", "routing-key", properties, messageBodyBytes);