1

所有在 Tibco EMS 5.* 和 .NET API 的上下文中

我必须使用现有的消息处理模型,其中循环:

  • 连接已创建/打开
  • 会话已创建/打开
  • 消息消费者已创建
  • 调用接收方法

如果 message != null 则我们使用它并提交或回滚事务(在基础会话上)。系统在该模型中每 x 秒拉一次。

我创建了一个连接工厂,确保只创建新会话(如果前一个会话仍在使用中)。这样,系统就可以在同一连接上工作。

但是,我遇到了预取问题,因为每个 Receive 调用(通过 .NET 接口)返回一条消息并将多条(pre-fetch-1)放入本地队列。所以我下次真的应该重用同一个会话,以便阅读已经提取的消息。我已经放入包装器以重用会话和消息使用者,只要那里有东西(接收不会返回 null)。这种方法很有效,但似乎我在接收时可能会得到空值,即使本地仍然有一些东西。似乎只要我在同一个连接上,获取的消息就会被标记为已传递(即使会话被显式关闭)。

有人知道如何使用 pre-fetch = 1 打开连接/会话吗?还是有更好的解决方案?

提前致谢,

4

1 回答 1

1

解决方法:关闭队列级别的预取。

于 2011-02-10T16:31:40.130 回答