0

我有一个 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 显示以下内容:调度队列正在填充

根据我的阅读,调度队列中充满了发送给消费者但未被确认的消息。为什么会这样?

4

1 回答 1

-1

问题与我们的队列是虚拟目的地有关。

于 2014-08-19T13:45:26.450 回答