Сообщения с истечением срока действия не удаляются из RabbitMQ

Я отправляю обычное сообщение через производителя в RabbitMQ, а затем отправляю второе сообщение с атрибутом expiration, присвоенным значению. Затем с помощью команды rabbitmqctl list_queues я отслеживаю статус сообщений.

Я обнаружил, что если я сначала отправляю обычное сообщение, а затем сообщение с expiration, rabbitmqctl list_queues всегда показывает мне 2 сообщения, ожидающие в очереди. Когда я потребляю их, я получаю только один.

С другой стороны, если я отправлю только 1 сообщение с expiration, сначала я увижу сообщение, а затем, по истечении правильного времени истечения, обнаружу, что оно удалено.

Мой вопрос: в первой ситуации сообщение действительно занимает место? Или это баг интерфейса?

Моя версия rabbitMQ: rabbitmq-server.noarch -> 3.1.5-1.el6


person Anastasios Andronidis    schedule 16.01.2015    source источник
comment
Связано: stackoverflow.com/questions/26206512/   -  person pinepain    schedule 17.01.2015


Ответы (1)


Похоже, вы пропустили часть документации по этой функции. Если вы читали документацию RabbitMQ по TTL для каждого сообщения (срок действия), вы заметили следующее предупреждение. именно то поведение, которое вы видите (выделение добавлено):

Предостережения

Хотя потребители никогда не видят сообщения с истекшим сроком действия, только когда сообщения с истекшим сроком достигают начала очереди, они фактически отбрасываются (или помечаются недоставленными). При установке TTL для каждой очереди это не проблема, так как просроченные сообщения всегда находятся в начале очереди. Однако при настройке TTL для каждого сообщения просроченные сообщения могут ставиться в очередь после неистекших до тех пор, пока последние не будут израсходованы или истечет срок их действия. Следовательно, ресурсы, используемые такими просроченными сообщениями, не будут освобождены, и они будут подсчитаны. в статистике очереди (например, количество сообщений в очереди).

person theMayer    schedule 16.01.2015