带有C#和Apache NMS的ActiveMQ - 计算队列中的消息

fin*_*ook 2 c# activemq-classic message-queue apache-nms

我正在使用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;
    }
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用QueueBrowser来获取计数,但它返回的IEnumerator总是为空.我从这个页面得到了使用QueueBrowser的想法,但也许还有另一种方法我应该这样做?

更新:

我通过枚举器找到的"无限循环"问题的解决方案是通过访问当前消息来解决的.它现在只经过一次循环(这是正确的,因为队列中只有一条消息).

新的while循环是:

while(messages.MoveNext())
{
    IMessage message = (IMessage)messages.Current;
    messageCount++;
}
Run Code Online (Sandbox Code Playgroud)

O.C*_*.C. 6

我现在没有ActiveMq,所以我不能尝试,但我认为问题是你没有开始连接.试试这样:

using (IConnection connection = factory.CreateConnection())
{
    connection.start ();

     using (ISession session = connection.CreateSession())
     {
      //Whatever...
     }

}
Run Code Online (Sandbox Code Playgroud)