Я использую 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++;
}