带有.Net客户端的TIBCO JMS - 队列中卡住消息的问题

时间:2010-11-16 21:51:21

标签: .net jms tibco-ems

我们正在使用TIBCO JMS 4.3.3和相同版本的.Net TIBCO.EMS.dll for .net 2.0 我们在队列中卡住消息时遇到了很大的问题。我们正在消耗来自该主题桥接的一个队列中的消息。我们的应用程序通过长期会话创建多个消费者 - 每个长期会话都有一个消费者。会话和使用者是在主线程中创建的,但消费者自己使用Receive()方法在单独的线程上使用超时来消费消息。每个消费者都有自己的线程在其中工作。在每次成功收到的时候,我们都会在一个会话中调用Commit,这个会话创建了收到该消息的消费者(对于难看的措辞而言)。

问题在于,当这个队列被大量填充时(通过主题的桥接),许多消息都会被卡住 - 没有线程可以接收它们,我们可以清楚地看到它们浏览队列,如果我们重新启动它们,它们会被重新处理应用。我们还看到,当消息被卡住时,如果在TIBCO控制台中运行“show consumer”,则已发送消息的数量将变得不等于已确认消息的数量。

我们完全迷失了 - 我们尝试为此队列启用和禁用预取。两种解决方案都没有效我们将接收超时从1秒增加到1分钟,当待处理消息的数量越过某个边界时,消息仍然卡住。

任何帮助,提示或建议都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

最后我们发现4.4.3版本的TIBCO EMS中存在一个错误导致某些客户端连接冻结。它固定在5.x

答案 1 :(得分:0)

在您的线程代码中,作为队列接收器的某个地方似乎缺少确认\ Commit。 我建议审查消费者代码..也许是多线程。我假设所有线程都在监听独特的队列..

-HB