MQ 是否仍然有每线程连接数的限制?

Does MQ still have a limitation of per-thread connections?

上次一怒之下用MQ(v6,内存,HPUX平台),有个限制,一个进程内的线程之间不能共享连接。

如果您尝试从 已经 连接到队列管理器的线程执行另一个 MQCONN,它会很快返回上一个句柄和警告说它正在重新使用它,所以如果您正确管理共享连接,单个线程可以有效地建立到同一个队列管理器的许多连接。

但是,如果您在此过程中尝试从 不同的 线程进行连接,则会为您提供不同的连接句柄,并且会带来所有的缓慢,因为它必须去通过所有冗长的 IPC、安全检查、运行启动另一个代理线程或进程等。

我问这个问题的原因是,已向客户端展示了一种按需创建线程的体系结构(Windows 下的 C#),并且它们都将尝试连接到同一个队列管理器。如果相关的话,他们提议 运行 MQ 7.5。

所有线程都将使用 XMSFactoryFactory 进行连接,这据说可以提供 MQ 连接池以提高效率,但是,如果仍然存在每个线程连接的要求并且线程 自身 没有被池化,我担心 MQ 连接池可能没有用,因为每个新线程无论如何都需要一个新连接。

现在可以跨线程共享连接。通读此 link 了解更多信息。

XMS .NET 是 C# 语言的 JMS 规范实现,用于与 IBM MQ 队列管理器通信。 XMSFactoryFactory 不提供连接池。

您还应注意,根据 JMS v1.1 规范,JMS 会话对象及其子对象(生产者、消费者等)不应跨线程共享。