ActiveMQ с C # и Apache NMS - подсчет сообщений в очереди - PullRequest
1 голос
/ 22 сентября 2011

Я использую 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 Ответ

6 голосов
/ 22 сентября 2011

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

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

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...