概述
TTL (Time-To-Live Extensions)过期时间
通过设置policy进行设置
rabbitmqctl set_policy TTL ".*" '{"message-ttl":60000}' --apply-to queuesrabbitmqctl
设置Message的过期时间
设置queue中Message的TTL
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);
设置Message的过期时间
byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.expiration("60000")
.build();
channel.basicPublish("my-exchange", "routing-key", properties, messageBodyBytes);
设置队列的过期时间
使用policy设置
rabbitmqctl set_policy expiry ".*" '{"expires":1800000}' --apply-to queuesrabbitmqctl
程序设置
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-expires", 1800000);
channel.queueDeclare("myqueue", false, false, false, args);
Dead Letter Exchanges(死信队列)
设置myqueue
的死信队列为some.exchange.name
channel.exchangeDeclare("some.exchange.name", "direct");
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", "some.exchange.name");
channel.queueDeclare("myqueue", false, false, false, args);
设置死信routingKey
args.put("x-dead-letter-routing-key", "some-routing-key");
rabbitmqctl set_policy DLX ".*" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues
延时队列
实现方式:TTL
+DLX
(死信队列)
Message
先发送到设置了TTL的Queue中,过期时间到,Message被发送到死信队列中,订阅死信队列可以实现延时队列的功能;
相关插件:rabbitmq-delayed-message-exchange