我有一个Java客户端,使用10个连接连接到MQ。这些连接在Java客户端运行期间保持打开状态。对于每个线程,我们创建一个消息,创建一个会话,发送消息并关闭会话。我们使用Spring CachingConnectionFactory,并且有一个sessionCacheSize为100。我们被我们的MQ工程团队告知,我们的队列管理器最大连接数为500,而我们已经超出了这一限制。QM.ini文件的内容为:
我在MQ Explorer中观察到的是,队列上的打开输出计数保持静态为10,但是如果我们在2个队列之间进行负载均衡,每个队列上都是10,即使我们仍然只有10个连接。所以我想知道的是,在MQ术语中,JMS连接和会话相当于什么?
我曾经认为,连接等同于活动通道,而会话是一个句柄,因此我们可能超出了句柄的数量,因为我们打开(和关闭)的会话数量达到了数百或数千,而我们只有10个连接。尽管与此相反,IBM技术说明书“解释JMS连接工厂的连接池和会话池设置”下面的代码片段表明,最大通道数应该大于最大会话数,但是我们永远不知道这一点,因为它取决于负载(除非这应该大于sessionCacheSize?)。
每个会话代表与队列管理器的一个TCP/IP连接。在此处提到的设置中,最多可以有100个TCP/IP连接。如果您正在使用WebSphere MQ,则重要的是要调整队列管理器的MaxChannels设置,该设置位于qm.ini文件中,以大于每个JMS连接工厂从连接到队列管理器的最大可能会话数之和的值为目标。感谢您对如何最佳配置MQ的任何帮助。
maxChannels=500
maxActiveChannels=256
maxHandles=256
我在MQ Explorer中观察到的是,队列上的打开输出计数保持静态为10,但是如果我们在2个队列之间进行负载均衡,每个队列上都是10,即使我们仍然只有10个连接。所以我想知道的是,在MQ术语中,JMS连接和会话相当于什么?
我曾经认为,连接等同于活动通道,而会话是一个句柄,因此我们可能超出了句柄的数量,因为我们打开(和关闭)的会话数量达到了数百或数千,而我们只有10个连接。尽管与此相反,IBM技术说明书“解释JMS连接工厂的连接池和会话池设置”下面的代码片段表明,最大通道数应该大于最大会话数,但是我们永远不知道这一点,因为它取决于负载(除非这应该大于sessionCacheSize?)。
每个会话代表与队列管理器的一个TCP/IP连接。在此处提到的设置中,最多可以有100个TCP/IP连接。如果您正在使用WebSphere MQ,则重要的是要调整队列管理器的MaxChannels设置,该设置位于qm.ini文件中,以大于每个JMS连接工厂从连接到队列管理器的最大可能会话数之和的值为目标。感谢您对如何最佳配置MQ的任何帮助。