.NET EMS API 基于JMS。在 JMS 中,Connection 和 Session 对象被指定为线程安全的,并且可以在程序中重用。您非常正确,因为 Connection 对象仅代表 EMS 服务器的网络管道。EMS 用户指南指出:
连接是一个相当重量级的对象,因此大多数客户端会创建一次连接并保持打开状态,直到客户端退出。如有必要,您的应用程序可以创建多个连接。
关于会话:
Session 是用于生产或消费消息的单线程上下文。您可以使用 Session 对象创建消息生产者或消息消费者。
从本质上讲,除非您需要非常大的容量并且遇到性能限制,否则在您的应用程序中仅使用一个连接是非常安全的。会话控制在其中创建的任何生产者或消费者的事务/确认语义,但再次可以安全地重用。对于应用程序中存在的具有不同生命周期的模块,我可能会使用单独的会话(想想应用程序服务器中的单独部署单元)。
您的 EMS 服务器安装将包含一个包含各种代码的示例目录(例如C:\tibco\ems\5.0\samples\cs)。csTopicSubscriber.cs中的代码展示了如何编写单线程主题消费者。没有多线程主题消费者示例,但csMsgConsumerPerf.cs演示了如何使用队列进行操作。
请务必在完成后清理您创建的所有对象 - 例如,在完成后关闭主题消费者对象、会话和连接。当与预取和容错重新连接设置结合使用时,如果不关闭它们而泄漏句柄可能会导致不可预知的行为。