我有一个Java客户端,它用10个连接连接到MQ。它们在Java客户端运行期间保持开放状态。对于每个线程,我们创建一个消息,创建一个会话,发送消息并关闭会话。我们使用的是sessionCacheSize,sessionCacheSize为100。我们的MQ工程团队告诉我们,我们的队列管理器的最大连接是500个,而且我们的连接超过了这个值。QM.ini文件有:
maxChannels=500
maxActiveChannels=256
maxHandles=256
我在MQ资源管理器中观察到的是,队列上的开放输出计数保持在10,但是,如果我们跨2个队列加载平衡,则每个队列的负载平衡是10,尽管我们仍然只有10个连接。因此,我想知道的是,在MQ术语中,jms连接和会话等同于什么?
我确实认为连接等同于活动通道,会话是句柄,所以当我们打开(和关闭)会话的数量达到数百或数千次时,句柄可能会超过句柄,而我们只有10个连接。尽管与此相反,下面来自IBM的Technote "JMS连接工厂连接池和会话池设置的解释“的代码片段表明,最大通道应该大于最大会话,但是我们永远不知道这取决于负载(除非这应该大于sessionCacheSize?)。
每个会话表示到队列管理器的TCP/IP连接。使用这里提到的设置,最多可以有100个TCP/IP连接。如果您正在使用WebSphere MQ,那么重要的是将位于qm.ini文件中的队列管理器的MaxChannels设置调优到一个大于连接到队列管理器的每个JMS工厂的最大会话数之和的值。
任何关于如何最好地配置MQ的帮助都将不胜感激。
发布于 2014-07-09 12:21:28
假设您在MQ通道上的最大会话数设置为1 (MQ v7和v7.5中的默认值为10 ),则JMS连接将导致TCP连接(MQ通道实例),而JMS会话将导致另一个TCP连接( MQ通道实例)。
从您的更新中可以看出,您已经配置了10个JMS连接,Spring中的sessionCacheSize设置为100,所以10x100意味着创建了1000个潜在的MQ通道实例。开放输出计数将显示有多少“活动”JMS会话试图发送消息,而不一定有多少已被“缓存”。
MQ通道上的会话共享可能在这里帮助您,因为这定义了在一个TCP连接(MQ通道实例)上可以共享多少逻辑连接。因此,默认的10个会话意味着您可以创建10个JMS会话,这些会话仅在一个TCP连接上运行。
https://stackoverflow.com/questions/24653053
复制相似问题