MQ 是不是仍然有每个线程连接的限制?
Posted
技术标签:
【中文标题】MQ 是不是仍然有每个线程连接的限制?【英文标题】:Does MQ still have a limitation of per-thread connections?MQ 是否仍然有每个线程连接的限制? 【发布时间】:2015-03-28 10:45:34 【问题描述】:上次我在愤怒中使用 MQ(v6,从内存,在 HPUX 平台上)时,存在一个限制,即无法在进程内的线程之间共享连接。
如果您尝试从一个已经连接到队列管理器的线程执行另一个MQCONN
,它会很快返回之前的句柄并警告说它正在重新使用它因此,只要您正确管理共享连接,单个线程就可以有效地与同一个队列管理器建立多个连接。
但是,如果您尝试从进程中的一个 不同 线程进行连接,则会给您一个不同的连接句柄,这会带来所有的缓慢,因为它必须经历所有的繁琐IPC、安全检查、运行另一个代理线程或进程等等。
我问这个问题的原因是,客户端已经看到了一种架构,其中线程是按需创建的(Windows 下的 C#),它们都将尝试连接到同一个队列管理器。他们提议运行 MQ 7.5,如果相关的话。
所有线程都将使用XMSFactoryFactory
进行连接,据称它提供了 MQ 连接池以提高效率,但是,如果仍然存在每个线程的连接要求并且线程它们自己没有被池化,我'我担心 MQ 连接池可能无用,因为每个新线程都需要一个新连接。
【问题讨论】:
【参考方案1】:现在可以跨线程共享连接。阅读此link 了解更多信息。
XMS .NET 是 C# 语言的 JMS 规范实现,用于与 IBM MQ 队列管理器进行通信。 XMSFactoryFactory
不提供连接池。
您还应该注意,根据 JMS v1.1 规范,JMS 会话对象及其子对象(生产者、消费者等)不应跨线程共享。
【讨论】:
也许我读错了,但我们有代码可以执行XMSFactoryFactory ff = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ); IConnectionFactory cf = ff.CreateConnectionFactory();
并且设置的属性之一是 WMQ_USE_CONNECTION_POOLING
(这是来自内存,代码在工作)。
WMQ_USE_CONNECTION_POOLING 属性未记录,因此不应使用。您可以在这里找到所有 XMS .NET ConnectionFactory 属性 - www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/…
@Shashi 还是这样(关于不支持池化)?
是的,还是这样以上是关于MQ 是不是仍然有每个线程连接的限制?的主要内容,如果未能解决你的问题,请参考以下文章