ActiveMQ与c#和Apache NMS -计数队列中的消息
本文关键字:队列 消息 Apache NMS ActiveMQ | 更新日期: 2023-09-27 18:09:33
我正在使用ActiveMQ使用c#应用程序发送和接收消息。然而,我有一些困难,只是得到队列中的消息计数。下面是我的代码:
public int GetMessageCount()
{
int messageCount = 0;
Uri connecturi = new Uri(this.ActiveMQUri);
IConnectionFactory factory = new NMSConnectionFactory(connecturi);
using (IConnection connection = factory.CreateConnection())
using (ISession session = connection.CreateSession())
{
IDestination requestDestination = SessionUtil.GetDestination(session, this.QueueRequestUri);
IQueueBrowser queueBrowser = session.CreateBrowser((IQueue)requestDestination);
IEnumerator messages = queueBrowser.GetEnumerator();
while(messages.MoveNext())
{
messageCount++;
}
connection.Close();
session.Close();
connection.Close();
}
return messageCount;
}
我想我可以使用QueueBrowser来获取计数,但它返回的IEnumerator总是空的。我从这个页面得到了使用QueueBrowser的想法,但也许有另一种方式我应该这样做?
更新:
通过访问当前消息,解决了我在遍历枚举器时发现的"无限循环"问题。它现在只经过一次循环(这是正确的,因为队列中只有一条消息)。
新的while循环是:
while(messages.MoveNext())
{
IMessage message = (IMessage)messages.Current;
messageCount++;
}
我现在没有ActiveMq,所以我不能尝试它但我认为问题是你没有开始连接。试试这样:
using (IConnection connection = factory.CreateConnection())
{
connection.start ();
using (ISession session = connection.CreateSession())
{
//Whatever...
}
}