Потребительская служба не удаляет все сообщения из очереди ActiveMQ
У меня есть служба Windows, которая пытается использовать сообщения из очереди ActiveMQ. Тем не менее, он получает только некоторые сообщения, а другие застревают в "ожидающих сообщениях" в очереди. ActiveMQ сообщает, что поставил в очередь, скажем, 500 сообщений потребителю, но только 300 были сняты с очереди. В службе настроено более одного слушателя. Вот важная часть кода:
private void setupListener(string queue, string brokerUri)
{
try
{
ISession session = connectionConsumers[brokerUri].CreateSession();
session.CreateConsumer(session.GetQueue(queue))
.Listener += new MessageListener(consumer_Listener);
}
catch (Exception ex)
{
Log.Error("An exception has occured setting up listener for " + queue + " on " + brokerUri + ": {0}, {1}", ex, ex.Message);
}
}
void consumer_Listener(IMessage message)
{
try
{
processLog((message as ITextMessage).Text);
message.Acknowledge();
}
catch (NMSException ex)
{
Log.Error("ActiveMQ Connection Failure: {0}, {1}", ex, ex.Message);
}
catch (Exception ex)
{
Log.Error("An exception has occured trying to process a message: {0}, {1}", ex, ex.Message);
}
}
Есть ли что-то не так с тем, как я распознаю сообщения, которые могут привести к тому, что некоторые из них не будут подтверждены? Это проблема параллелизма? Я не уверен, что они все еще проходят через функцию processLog (добавлена в мою базу данных).
РЕДАКТИРОВАТЬ: Я думаю, что это больше связано с подтверждениями не происходит должным образом (по некоторым причинам). Я не получаю исключения, добавленные в мои журналы. Однако activemq показывает следующее:
Из того, что я прочитал, очередь отправки заполняется сообщениями, которые были отправлены потребителю, но не подтверждены. Почему это может быть?
1 ответ
Проблема была связана с тем, что наши очереди были виртуальными пунктами назначения.