2015-12-21 2 views
1

У меня есть http-сервер, который получает некоторые сообщения и должен ответить 200, когда сообщение успешно сохраняется в очереди, а 500 - это сообщение не добавляется в очередь.Как заставить rabbitmq отказаться от сообщений, когда очередь заполнена?

Я хотел бы, чтобы rabbitmq отклонил мои сообщения, когда очередь достигла предела размера.

Как я могу это сделать?

+0

Короче говоря, вы пытаетесь предоставить синхронный интерфейс асинхронной функции. Нет никакого определенного способа сделать это, афайк. Не путайте с [dead-lettering] (https://www.rabbitmq.com/dlx.html) и [ограничение длины очереди] (https://www.rabbitmq.com/maxlength.html), сообщения удалены из передней части очереди (сначала будут удалены самые старые сообщения). Может случиться так, что в текущей ситуации RabbitMQ не соответствует архитектурным требованиям или вам придется проектировать архитектуру по-другому. – pinepain

ответ

0

На самом деле вы не можете настроить RabbitMq таким образом. но вы можете проверить размер программно очереди, как:

`DeclareOk queueOkStatus = channel.queueDeclare(queueOutputName, true, false, false, null); 
if(queueOkStatus.getMessageCount()==0){//your logic here}` 
but be careful, because this method returns number of non-acked messages in queue. 
0

Если вы хотите знать об этом, вы можете проверить количество Q перед вставкой. Он отправляет запрос на тот же канал. Утверждение Q возвращает messageCount, который является числом сообщений «Ready». Примечание. Это не включает сообщения в состоянии без подтверждения.

Если вы не хотите, чтобы быть в курсе длины Q, то, как указаны в 1 комментарии вопроса:

x-max-length: Как много (готовых) сообщений очередь может содержать, прежде чем он начинает падать их с его головы. (Устанавливает аргумент «x-max-length».)

Смежные вопросы