我需要從.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