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

时间:2015-01-29 09:12:49

标签: multithreading ibm-mq

上次我在愤怒中使用MQ(v6,来自内存,在HPUX平台上),存在一个限制,即连接无法在进程内的线程之间共享。

如果你试图从已经连接到队列管理器的线程中再做一次MQCONN,它会很快回到上一个句柄并发出一条警告,说它是使用它,如果您正确管理共享连接,单个线程可以有效地连接到同一个队列管理器。

但是,如果您尝试在此过程中从不同的线程进行连接,则会为您提供一个不同的连接句柄,所有这些都会导致缓慢,因为它必须经历所有的错误。 IPC,安全检查,运行另一个代理线程或进程等。

我之所以这样说的原因是客户端已经显示了一个架构,其中按需创建线程(Windows下的C#),并且它们都将尝试连接到同一个队列管理器。他们建议运行MQ 7.5,如果相关的话。

线程将全部使用XMSFactoryFactory进行连接,{{1}}可以提供MQ连接池以提高效率,但是,如果仍然存在每线程连接要求并且线程自身不是&在汇总时,我担心MQ连接池可能无用,因为每个新线程都需要新的连接。

1 个答案:

答案 0 :(得分:3)

现在可以跨线程共享连接。请阅读此link以获取更多信息。

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

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