我需要知道来自.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条消息”
我认为RabbitMQ会持续几秒钟来更新来自HTTP API的消息计数,或者它不会在WaitForConfirmsOrDie函数中等待。
你能帮我吗?
提前谢谢。
答案 0 :(得分:0)
查看管理插件中的统计间隔:https://www.rabbitmq.com/management.html#statistics-interval
默认情况下,数据库每5秒更新一次,但您可以对其进行配置。请记住,如果减少该值,性能将受到影响,因为管理DB将执行更多写入