For instance, if we want to use a queue named "ttl", with a time to live of half a second, we could write something like this (I use Java 7, as you can deduce from the diamond operator):
public class SendRecTTL {
    private final static String QUEUE_NAME = "ttl";
    private final static int TTL = 500;
    private Map<String, Object> args = new HashMap<>();
    public SendRecTTL() { args.put("x-message-ttl", TTL); }
    // ...
        channel.queueDeclare(QUEUE_NAME, false, false, false, args);
A message sent to this queue would expire after half a second, and would be considered "dead".I have written a simple test application for the current RabbitMQ version (2.8.2) that sends and receives a message on such a queue. Adding a sleep between the two actions, we can see what happen if the delay is too big.
Better if your code is prepared to not receive anything, not hanging forever:
QueueingConsumer.Delivery delivery = consumer.nextDelivery(1000);
if(delivery == null)
{
    // ...
Full Java source code on github. 
thaks sir
ReplyDeletemy pleasure
Deletemessage published to a queue no one consumed it (i am not set any ttl args) can server discarded that messages by default?
DeleteI guess I don't get your point. If you want the server to discard a message that is not consumed, you set a TTL. If you don't set it, you are stating that the server should not discard any message.
Delete