官术网_书友最值得收藏!

How to let queues expire

In this third case, the TTL is not related to messages anymore, but to queues. This case is a perfect fit to manage server restarts and updates. The RabbitMQ drops the queue as soon as the TTL has elapsed, that is, after the last consumer has stopped consuming messages.

As in the previous TTL-related recipes, you can find the Producer.java, Consumer.java, and GetOne.java files in Chapter02/Recipe03/Java/src/rmqexample.

Getting ready

To use this recipe, we need to set up the Java development environment as indicated in the Introduction section of Chapter 1, Working with AMQP.

How to do it...

As in the previous example, the extension regards only Consumer.java:

  1. Create or declare the exchange using the following code:
    channel.exchangeDeclare(exchange, "direct", false);
  2. Create or declare the queue, specifying a 30,000 milliseconds timeout to the x-expires optional argument as follows:
    Map<String, Object> arguments = new HashMap<String, Object>();
    arguments.put("x-expires", 30000);
    channel.queueDeclare(queue, false, false, false, arguments);
  3. Bind the queue to the exchange where messages are going to come from as follows:
    channel.queueBind(queue, exchange, routingKey);

How it works...

When we run either the Consumer.java or GetOne.java file, the timed queue is created and until there is a consumer attached to the queue or we call channel.basicGet(), it will continue to exist.

Only when we stop both the operations for at least 30 seconds, the queue is dropped and all the messages that it contains are lost.

Note

The queue is dropped independently from the fact that there are producers publishing messages to it or not.

In the course of the experiments, we can monitor the RabbitMQ queue status issuing rabbitmqctl list_queues and see this happening.

So, we can imagine a scenario where we have a statistics analysis program that needs to be restarted for an update of the code itself. It will restart without losing any messages, since its named queues will have a longer timeout. Alternatively, if we stop it, its queues will be deleted after the given TTL and worthless messages won't be stored at all.

主站蜘蛛池模板: 洛宁县| 澎湖县| 嘉定区| 洪雅县| 敦煌市| 乐昌市| 永善县| 甘南县| 通榆县| 宜城市| 土默特右旗| 吐鲁番市| 独山县| 广安市| 武鸣县| 平远县| 翁牛特旗| 平昌县| 江北区| 宁乡县| 诸城市| 泰兴市| 无棣县| 称多县| 壶关县| 宝丰县| 静海县| 株洲县| 五峰| 临安市| 白沙| 汾阳市| 微山县| 渝北区| 桦甸市| 白玉县| 独山县| 瓮安县| 莱西市| 武穴市| 西盟|