概述

Protocol Extensions-高级特性的入口

TTL (Time-To-Live Extensions)过期时间

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(死信队列)

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


优先级队列

Priority Queue Support