2015-12-21 7758 views
1

我有一个http服务器接收一些消息,并且当消息成功存储在队列中时必须回复200,并且消息未被添加到队列中。如何让rabbitmq在队列满时拒绝消息?

我希望rabbitmq在队列达到大小限制时拒绝我的消息。

我该怎么办呢?

+0

总之,您尝试提供异步功能的同步接口。没有确定的方法来做到这一点,afaik。不要与[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,它是'就绪'消息的数量。注意:这不包括处于未确认状态的消息。

如果你不想知道将q的长度,然后在这个问题的1号意见规定:它开始下降之前 多少(就绪)消息队列可以包含:

x-max-length从头开始。 (设置“x-max-length”自变量。)

相关问题