gpt4 book ai didi

c# - Tibco EMS Session 共享 Connection 对象

转载 作者:太空狗 更新时间:2023-10-30 00:45:58 25 4
gpt4 key购买 nike

我们与 EMS 代码的连接最初设计不当,并为我们收听的每个主题创建了一个 TopicConnection 对象。因此,实际上,每当我们订阅一个主题时,我们都会创建一个新连接、一个新 session ,最后创建一个新监听器。

我们想切换到单一连接模型。虽然我可以通过共享一个连接对象并为每个主题创建一个新的 session 对象,在我们的代码中轻松地做到这一点,但我们不确定这是否会在没有代码的情况下导致任何问题。

我的理解是 Tibco EMS 客户端库在共享连接方面是线程安全的。实际上,连接只是一个管道, session 可以以线程安全的方式重新使用此管道。

这个假设是否正确,或者还有更多?

最佳答案

.NET EMS API 基于 JMS .在 JMS 中,Connection 和 Session 对象被指定为线程安全的,可以在程序中重复使用。您是完全正确的,因为 Connection 对象只是表示到 EMS 服务器的网络管道。 EMS 用户指南指出:

A connection is a fairly heavyweight object, so most clients will create a connection once and keep it open until the client exits. Your application can create multiple connections, if necessary.

关于 session :

A Session is a single-threaded context for producing or consuming messages. You create Message Producers or Message Consumers using Session objects.

基本上,除非您需要非常大的容量并且遇到性能限制,否则在您的应用程序中只使用一个连接是绝对安全的。 session 控制其中创建的任何生产者或消费者的事务/确认语义,但再次安全地重用。对于存在于具有不同生命周期的应用程序中的模块,我可能会使用单独的 session (想想应用程序服务器中的单独部署单元)。

您的 EMS 服务器安装将包含一个示例目录,其中包含各种代码(类似于 C:\tibco\ems\5.0\samples\cs)。 csTopicSubscriber.cs 中的代码展示了如何编写单线程主题使用者。没有多线程主题消费者示例,但 csMsgConsumerPerf.cs 演示了如何使用队列来实现。

请务必在完成后清理您创建的任何对象 - 例如完成后关闭主题使用者对象、 session 和连接。与预取和容错重新连接设置结合使用时,未关闭句柄泄漏可能会导致不可预测的行为。

关于c# - Tibco EMS Session 共享 Connection 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com