我有一个尝试使用某些activemq队列消息的Windows服务。但是,它只会获得一些消息,而其他消息则卡在队列中的“消息待处理”中。 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显示以下内容:根据我的阅读,调度队列正在填充发送给消费者但未被确认的消息。为什么会这样?
答案 0 :(得分:0)
问题与我们的队列是虚拟目的地有关。