在Tibco EMS和.NET API中进行预取

时间:2010-11-10 10:56:27

标签: .net message-queue tibco-ems

所有在Tibco EMS 5. *和.NET API

的上下文中

我要使用现有的消息处理模型,在循环中:

  • 创建/打开连接
  • 会话已创建/已打开
  • 消息使用者已创建
  • 接收方法称为

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

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

但是,由于每个Receive调用(通过.NET接口)返回一条消息并将几个(pre-fetch-1)放入本地队列,因此我遇到了预取问题。 所以我应该在下次重复使用相同的会话,以便读取已经被拉出的消息。 我已经使用包装来重用会话和放大器。消息使用者只要有东西(Receive不会返回null)。 这种方法很有效,但似乎我可能在Receive上获得null,即使在本地仍然存在某些东西。 似乎只要我在同一个连接上,提取的消息将被标记为已传递(即使会话明确关闭)。

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

提前致谢,

1 个答案:

答案 0 :(得分:1)

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