2014-07-09 4 views
3

10 개의 연결로 MQ에 연결하는 Java 클라이언트가 있습니다. Java 클라이언트가 실행되는 동안 열려 있습니다. 각 스레드마다 메시지를 만들고 세션을 만들고 메시지를 보내고 세션을 닫습니다. 우리는 Spring CachingConnectionFactory를 사용하고 있으며 sessionCacheSize는 100입니다. 우리는 MQ 엔지니어링 팀에서 큐 관리자의 최대 연결 수가 500이며 우리가이를 초과하고 있다는 말을 들었습니다. QM.INI 파일이 있습니다MQ 최대 연결 문제

maxChannels=500 
maxActiveChannels=256 
maxHandles=256 

나는 MQ 탐색기에서 관찰 한 내용을 큐에 오픈 출력 카운트가 우리가 비록,이 큐에서 균형이 각 (10)의로드 그러나 경우, 10에서 정적으로 유지한다는 것입니다 우리는 여전히 10 개의 연결 만 가지고 있습니다. 그래서 내가 알고 싶은 것은 MQ 연결과 세션이 MQ 용어에서 동일하다는 것입니다.

연결이 활성 채널이고 세션이 핸들이라고 생각 했으므로 우리가 열고 닫은 세션의 양이 수백 또는 수천 개로 늘어날 때 우리가 초과 할 가능성이있는 핸들이었습니다. 반면 10 개의 연결 만 있습니다. 이것에 반대하지만, IBM의 Technote "Explanation of connection pool and session pool settings for JMS connection factories"에서 발췌 한 스 니펫은 최대 채널이 최대 세션보다 커야 함을 나타내지 만로드에 따라 다르다는 것을 결코 알지 못합니다 (sessionCacheSize보다 커야 만). .

각 세션은 큐 관리자에 대한 TCP/IP 연결을 나타냅니다. 여기에 언급 된 설정을 사용하면 최대 100 개의 TCP/IP 연결이 가능합니다. WebSphere MQ를 사용하는 경우 qm.ini 파일에있는 큐 관리자의 MaxChannels 설정 을 으로 조정하여 연결하는 각 JMS 연결 팩토리에서 최대 세션 수의 합계보다 큰 값으로 조정해야합니다 매니저 대기열로 이동합니다.

MQ를 구성하는 최선의 방법에 대한 도움을 주시면 감사하겠습니다.

답변

4

MQ 채널에서 최대 대화 수를 1 (MQ v7 및 v7.5의 기본값은 10)으로 설정하면 JMS 연결은 TCP 연결 (MQ 채널 인스턴스)과 JMS 세션은 또 다른 TCP 연결을 발생시킵니다 (MQ 채널 인스턴스).

업데이트에서 10 개의 JMS 연결이 구성되었고 Spring의 sessionCacheSize가 100으로 설정되어 있으므로 10 x 100은 1000 개의 잠재적 MQ 채널 인스턴스가 생성된다는 의미입니다. 열린 출력 수에는 '활성'JMS 세션이 메시지를 보내려고 시도하는 횟수가 표시되며 반드시 캐시 된 수는 아닙니다.

MQ 채널의 대화 공유는 하나의 TCP 연결 (MQ 채널 인스턴스)을 통해 공유 할 수있는 논리 연결 수를 정의하므로 여기에서 도움이됩니다. 따라서 10 개의 대화의 기본값은 하나의 TCP 연결을 통해 작동하는 10 개의 JMS 세션을 만들 수 있음을 의미합니다.

+0

안녕하세요, 응답 해 주셔서 감사합니다. 실례지만 최대 대화는 qm.ini 파일의 최대 채널 또는 최대 활성 채널과 관련이 있습니까? 초과하는 것으로 보이는 것은 이러한 속성입니다. 대화 제한이 위반되거나 모든 세션에 대해 발생하는 경우에만 세션 생성을 위해 TCP 연결이 생성됩니까? 또한 CachingConnectionFactory 인스턴스 하나를 가지고 있으며 모든 연결은이 연결에서 만들어지며 연결 당 세션 캐시 크기는 (모든 연결에서 100과 반대되는)? – Bazza

+0

최대 채널 수는 큐 관리자에서 정의 할 수있는 채널 수를 의미합니다. 최대 활성 채널은 큐 관리자에서 활성 상태 인 채널 인스턴스의 수를 의미합니다.최대 대화는 채널 자체의 속성이며 하나의 채널 인스턴스에서 여러 논리 연결을 여러 개 포함 할 수있는 방법을 제어합니다. qm.ini 등록 정보는 큐 관리자와 동일하므로 응용 프로그램 만 연결하는 것 이상의 기능이있을 수 있습니다. MQ 관리자에게 채널에 몇 개의 채널 인스턴스가 사용되고 있는지 물어보아야합니다. – whitfiea

+0

알겠습니다. 이 경우 모든 연결 (100 개의 연결에서 100) 또는 각 연결 (1000)간에 공유되는 단일 CachingConnectionFactory에 대한 sessionCacheSize가 있습니까? – Bazza