我想检查
- 获取队列中消息数量的最佳实践是什么?我知道我可以通过queue。getmessagecount()获得它我也知道你可以得到它,因为监视器插件得到它。是HTTP请求吗?或者使用rabbitmqctl应用程序(JNI?) ?如果我只想在X条消息到达时才做出反应,那么最好的方法是什么?
- 更重要的是,我可以通过推送获得队列中的消息数吗?
我可以声明一个接收推送通知的阈值吗?(例如,每次我有5000条消息时获得一个信号)
您可以使用队列x-max-length
http://www.rabbitmq.com/maxlength.html
队列长度是考虑就绪消息,忽略未确认消息和消息大小的度量。一旦达到限制,消息将从队列的前面被丢弃或成为死信,以便为新消息腾出空间。
因此您可以配置死信交换并管理超出限制拒绝的消息。
原因是一个名称,描述了为什么消息是死信,并且是以下之一:Rejected -消息被拒绝,requeue=false,expired -消息的TTL过期;或Maxlen -超过允许的最大队列长度。
我希望它有帮助
编辑* *
这个想法可以是:
在DLE上订阅一个队列,例如_queue
,这样当消息到达时就意味着您的消息到达了。
void hanlemymessage(msg){
.....
}
//// consumer _queue
public void handleDelivery(String consumerTag, Envelope envelope,
BasicProperties properties, byte[] body) throws java.io.IOException {
MyMessage m= new MyMessage(body)
voidhanlemymessage(m)
StartmyBulkConsumer()
}
现在你可以启动你的work_consumer
。
//// consumer work_queue
public void handleDelivery(String consumerTag, Envelope envelope,
BasicProperties properties, byte[] body) throws java.io.IOException {
MyMessage m= new MyMessage(body)
voidhanlemymessage(m)
if (msgcount.addandget()==mythreshold){
closeConsumer()
}
这可能是一个解决方案。
实际上我认为这个逻辑应该委托给应用程序:例如,work_consumer
总是在运行,并且您的应用程序在达到。