【发布时间】:2015-04-24 14:50:08
【问题描述】:
我需要知道来自 .NET 客户端的 RabbitMQ 中的消息总数。我知道最好的解决方案是使用 API HTTP,但我不能正常工作。
我使用已发布消息的确认,但我不知道为什么它不起作用。
我使用此代码在 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 条消息。如果我使用此代码(发布消息后等待 1 秒):
channel.BasicPublish(exchangeNameProducer, "", null, body);
channel.WaitForConfirmsOrDie();
Thread.Sleep(1000);
log("After WaitForConfirm ,messageCount = " + this.getMessagesCount() + " ; message = " + text);
然后它正常工作并且日志写“1 message left”
我认为 RabbitMQ 会持续几秒钟从 HTTP API 更新消息计数,或者它不会在 WaitForConfirmsOrDie 函数中等待。
你能帮帮我吗?
提前谢谢你。
【问题讨论】:
-
如果您需要获取特定队列中的消息计数 - stackoverflow.com/questions/17684848/…,否则除了调用 HTTP API(或运行 cli 工具)之外别无他法。
标签: .net rabbitmq message-queue