上一次我在time (从内存中使用v6,在HPUX平台上)中使用MQ时,存在一个限制,即进程中的线程之间不能共享连接。
如果您试图从一个已经连接到队列管理器的线程中执行另一个MQCONN
,它很快就会返回前一个句柄,并警告说它正在重用它,只要您正确地管理共享连接,一个线程就可以高效地建立到同一个队列管理器的多个连接。
但是,如果您试图从进程中的不同线程进行连接,这会给您提供一个不同的连接句柄,所带来的速度会很慢,因为它必须通过IPC的所有繁琐操作、安全性检查、运行另一个代理线程或进程等等。
我问这个问题的原因是,已经向客户机展示了一个按需创建线程的体系结构(Windows下的C#),它们都将尝试连接到同一个队列管理器。如果相关的话,他们建议运行MQ7.5。
线程都将使用XMSFactoryFactory
进行连接,据说它提供MQ连接池以提高效率,但是,如果仍然存在每个线程连接的要求,并且线程本身没有被池化,我担心MQ连接池可能是无用的,因为每个新线程无论如何都需要一个新的连接。
发布于 2015-01-29 02:16:27
现在,连接可以跨线程共享。有关更多信息,请阅读此链接。
.NET是C#语言中用于与IBM队列管理器通信的JMS规范实现。XMSFactoryFactory
不提供连接池。
您还应该注意到,根据JMSV1.1规范,JMS会话对象及其子对象(生产者、使用者等)不应该在线程之间共享。
https://stackoverflow.com/questions/28210809
复制相似问题