ActiveMQ с C# и 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;
    }

Я думал, что мог бы использовать QueueBrowser, чтобы получить счетчик, но IEnumerator, который он возвращает, всегда пуст. У меня появилась идея использовать QueueBrowser с этой страницы, но, может быть, есть другой способ сделать это?

Обновить:

Решение проблемы с "бесконечным циклом", которую я нашел при прохождении через перечислитель, было решено путем доступа к текущему сообщению. Теперь он проходит цикл только один раз (что правильно, поскольку в очереди только одно сообщение).

Новый цикл while:

while(messages.MoveNext())
{
    IMessage message = (IMessage)messages.Current;
    messageCount++;
}

1 ответ

Решение

У меня сейчас нет ActiveMq, поэтому я не могу попробовать его, но я думаю, что проблема в том, что вы не запускаете соединение. Попробуйте вот так:

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

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

}
Другие вопросы по тегам