RabbitMQ - Delayed Queue

RabbitMQ implements delay queue one: set TTL on the queue

Publish --> delaysync.exchange --> delay.5m.queue (delay queue) --> delay.exchange --> test.queue (normal queue) --> Consumer

// Delay queue start 
Map<String,Object> map = new HashMap<String,Object> ();
map.put( "x-message-ttl", 10000); // Message expiration time 
map.put("x-max-length", 500000); // Maximum number of messages backlog 
map.put("x- dead-letter-exchange", "delay.exchange"); // The message will be delivered to delay.exchange after it expires 
channel.queueDeclare("delay.5m.queue", true , false , false , map);

RabbitMQ implements delay queue 2: setting TTL on messages

Publish --> default exchange --> delay_queue (delay queue) --> amq.direct --> message_ttl_queue (normal queue) --> Consumer

queue:

// Delayed queue 
Map<String,Object> arguments = new HashMap<String,Object> ();
arguments.put( "x-dead-letter-exchange", "amq.direct"); // The message will be delivered to amq.direct after expiration 
arguments.put("x-dead-letter-routing-key", "message_ttl_routingKey "); // After the dead letter appears, it will be sent again according to the specified routing-key 
channel.queueDeclare("delay_queue", true , false , false , arguments);

Message sending:

// Set delay properties 
AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
 // deliveryMode: 1. Non-persistent, 2. Persistence 
AMQP.BasicProperties properties = builder.expiration("10000").deliveryMode (2 ).build();
channel.basicPublish("", "delay_queue", properties, msg.getBytes());

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325911624&siteId=291194637