1

我们将 TIBCO JMS 4.3.3 与用于 .net 2.0 的相同版本的 .Net TIBCO.EMS.dll 一起使用我们在队列中卡住消息时遇到了巨大的问题。我们正在使用从主题桥接的一个队列中的消息。我们的应用程序创建了多个具有长期会话的消费者——每个长期会话都有一个消费者。会话和消费者是在主线程中创建的,但消费者自己使用 Receive() 方法在单独的线程上使用带有超时的消息。每个消费者都有自己的工作线程。在每次成功接收时,我们都会在会话上调用 Commit,该会话创建了接收消息的消费者(抱歉措辞难看)。

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

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

任何帮助、提示或建议将不胜感激。

4

2 回答 2

2

最后我们发现TIBCO EMS 4.4.3版本有一个bug导致一些客户端连接冻结。它已在 5.x 中修复

于 2011-03-18T15:22:16.977 回答
0

您的线程代码中充当队列接收器的某处似乎缺少确认\提交。我建议查看消费者代码..也许是多线程。我假设所有线程都在监听唯一的队列..

-hB

于 2011-01-04T09:36:19.767 回答