我需要从.NET客户端了解RabbitMQ中的总消息。我知道最好的解决方案是使用API HTTP,但我无法正常工作。在RabbitMQ中获取总消息数
我使用已发布消息的确认,但我不知道为什么它不起作用。
我使用此代码,以便在RabbitMQ的发布消息:
private void message(string text)
{
var factory = new ConnectionFactory() { HostName = hostName, UserName = user, Password = password };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
try
{
channel.ExchangeDeclare(exchangeNameProducer, "direct", true);
channel.QueueDeclare(queueNameProducer, true, false, false, null);
channel.ConfirmSelect();
channel.QueueBind(queueNameProducer, exchangeNameProducer, "");
var body = Encoding.UTF8.GetBytes(text);
channel.BasicPublish(exchangeNameProducer, "", null, body);
channel.WaitForConfirmsOrDie();
log("After WaitForConfirm ,messageCount = " + this.getMessagesCount() + " ; message = " + text);
}
catch (Exception e)
{
log(e.Message);
}
}
}
“getMessagesCount”功能要求以HTTP API知道总消息计数。注意我使用WaitForConfirmsOrDie和ConfirmSelect函数来等待消息发布。
在我的示例中,消费者花30秒处理消息。 但是,日志始终打印剩余的0条消息,但如果我调试代码,日志会打印剩余的1条消息。
channel.BasicPublish(exchangeNameProducer, "", null, body);
channel.WaitForConfirmsOrDie();
Thread.Sleep(1000);
log("After WaitForConfirm ,messageCount = " + this.getMessagesCount() + " ; message = " + text);
然后它工作正常和日志写入“1条留言左”
我认为RabbitMQ的持续几秒钟更新消息计数:如果我用这个代码(发布消息之后等待1秒)来自HTTP API,或者它不会在WaitForConfirmsOrDie函数中等待。
请问您能帮我吗?
预先感谢您。
如果您需要将消息计入特定队列中,请执行以下操作:http://stackoverflow.com/questions/17684848/ rabbitmq-get-total-count-of-messages-enqueued,否则没有其他方法,而不是调用HTTP API(或运行cli工具)。 – pinepain 2015-02-23 17:25:50