![[z/OS]](../images/ngzos.gif)
WebSphere MQ가 z/OS에서 메시징 제공자로 사용하는 ASF 메시지 구동 Bean에 대한 연결 팩토리 구성
다양한 연결 팩토리 설정을 조정하여 메시지 구동 Bean(MDB) 작업에 대한 세션 및 연결 작성을 제어할 수 있습니다.
연결 팩토리 설정
인증 매개변수를 사용하여 애플리케이션과 서버를 특정 큐 관리자에 접속하기 위해 애플리케이션 및 메시지 리스너 포트가 둘 다 연결 팩토리에 바인드됩니다. 애플리케이션이 JMS를 이용하기 위해 사용하므로, 서버는 메시지 구동 Bean으로의 전달을 위해 도달하는 메시지를 청취하기 위해 동일한 관리 모델을 사용합니다. 이때 메시지 리스너 포트는 큐 연결 팩토리(또는 토픽 연결 팩토리) 및 해당 큐(또는 토픽)에 바인드됩니다.
각 연결 팩토리의 경우, 메시징 제공자 설정(예: 큐 관리자 설정), 연결 풀 특성 및 세션 풀 특성을 지정해야 합니다. 연결 팩토리의 연결 풀 최대 연결 수 특성 및 세션 풀 최대 연결 수 특성에 대한 설정은 리스너 포트, 애플리케이션 또는 둘 다에 연결 팩토리를 사용하고 있는지 여부에 따라 다릅니다.
연결 풀 최대 연결 수 설정
- 이 연결 팩토리에 맵핑된 리스너 포트에 맵핑되는 메시지 구동 Bean 수
- 메시지 구동 Bean은 onMessage()에서 해당되는 애플리케이션 로직을 수행할 때 JMS 연결을
확보할 수도 있습니다. 예를 들면, 다음과 같습니다.
- 다른 대상에 메시지 전달 또는 응답 전송
- 로그를 업데이트하지만 보유한 JMS 관련 호출 수행 안함
어느 경우에서든지, 이 메시지 구동 Bean에 대해 '1'을 계산하십시오. 이는 리스너 포트에서 사용하는 연결이기 때문입니다.
메시지 구동 Bean onMessage() 로직이 하나의 JMS 연결을 확보하면, 하위(servant) 작업자 스레드 수를 최대 연결 수에 더하십시오. 확보하지 못하면, 이(MDB) 애플리케이션 컴포넌트에 대해 최대 연결 수를 더하지 마십시오.
- 최대 연결 수
- 먼저 이 연결 팩토리를 사용하는 모든 애플리케이션을 확인하여 단일 애플리케이션 디스패치에서 확보된 최대 연결 수(일반적으로 '1')를
찾으십시오. 그런 다음, 이 수에 하위(servant)의 작업자 스레드 수를 곱해 최대 연결 수를 계산하십시오. 참고:
- 각 하위(servant)에는 연결 및 세션 풀과의 연결 팩토리가 있기 때문에 한 하위(servant)에 대해 계수 작업자만이 스레드됩니다.
- 또한 JMS 호출을 수행하기 위해 이 연결 팩토리를 사용하는 다른 비MDB 애플리케이션 컴포넌트를 포함합니다. 그러나 이 연결 팩토리를 사용하는 MDB 또는 비MDB 애플리케이션 컴포넌트 수에 관계없이, 각각 디스패치마다 하나의 JMS 연결을 사용하면 최대 연결 수는 하위(servant) 작업자 스레드 수(애플리케이션 수에 하위 작업자 스레드 수를 곱한 수가 아님)입니다.
세션 풀 최대 연결 수 설정
일반적인 모든 경우의 MDB 리스너 포트 처리에 대해, 세션 풀 최대 연결 수 특성을 단일 하위(servant)에 있는 작업자 스레드 수로 설정해야 합니다.
이는 동일한 연결 팩토리의 클라이언트에 대해서도 JMS 세션이 애플리케이션 디스패치 사이에, 또는 리스너 포트 인프라가 공유할 수 없기 때문이며, 또한 (풀 특성 설정을 연결 팩토리 레벨에서 한 번만 지정했어도) 연결 팩토리에서 확보된 JMS 연결마다 고유 세션 풀이 있기 때문입니다.
세션 풀 설정에 대해 더 높은 최대 연결 수 요구사항이 있는 애플리케이션에 대해, 리스너 포트와 애플리케이션 모두 동일한 연결 팩토리를 사용하는 경우를 가정할 수 있습니다. 그러나 이에 대해 여기에서 더 설명할 가치는 없습니다.
약간 또는 많은 연결 팩토리를 사용해야 하는지 여부
예를 들어, 메시지 구동 Bean마다 별도의 연결 팩토리를 작성하여 수행하여(이 경우, 연결 풀 최대 연결 수 특성 값을 1로 설정할 수 있음) 이 계산을 단순하게 유지할 것을 원할 수 있습니다. 또는 더 적은 연결 팩토리 관리 오브젝트를 관리하는 것을 원할 수 있습니다.
MDB 처리에 사용되는 연결 및 세션은 공유할 수 없습니다(즉, 한 번에 두 개 이상의 플로우를 사용할 수 없음). 따라서 더 적은 수의 연결 팩토리를 사용하는 방법으로 풀링을 처리하면 안 됩니다. 즉, 다른 연결 팩토리를 추가해도 MDB 리스너 포트 처리에서 달리 이용될 수 있는 연결 풀링을 막지 못합니다.
연결 팩토리 - 예제
- 각각의 하위(servant) 영역에 12개의 작업자 스레드가 있습니다. (서버에 있는 하위(servant) 수는 중요하지 않습니다. 각각의 하위가 고유 풀을 확보하기 때문입니다.)
- 리스너 포트 LP1은 연결 팩토리 CF1으로 맵핑됩니다. 메시지 구동 Bean MDB1은 LP1로 맵핑됩니다. MDB1의 onMessage() 애플리케이션 코드는 새 메시지를 전달 큐에 넣으므로, MDB1은 CF1으로도 해석되는 자원 참조를 수반합니다.
- 또한 동일 서버에서 리스너 포트 LP2가 정의되어 연결 팩토리 CF2에 맵핑됩니다. 메시지 구동 Bean MDB2A 및 MDB2B는 동일한 ejb-jar 파일에 정의되며 둘 다 보상적 JMS 선택기로 LP2에 맵핑됩니다. MDB2A 및 MDB2B 각각의 onMessage() 애플리케이션 코드는 일부 로깅되지만 어떤 메시지 구동 Bean도 자체의 고유 JMS API 호출을 수행하지 않습니다.
- 연결 팩토리 CF1의 경우, MDB1에 대해 1을 계산하십시오. MDB1 애플리케이션(해당되는 전달 메시지를 전송하기 위해 연결 팩토리 CF1도 사용)은 하나의 JMS 연결을 사용합니다. 작업자 스레드 수(12)에 을 곱해서 계산합니다. 연결 팩토리 CF1의 총 연결 풀 최대 연결 수는 13 = 12 + 1입니다.
- 연결 팩토리 CF2에 대해서는 MDB2A 및 MDB2B 각각에 대해 1을 계산하십시오. CF2를 사용하는 애플리케이션은 없으므로(리스너 포트 인프라만) 연결 팩토리 CF2의 연결 풀 최대 연결 수를 2로 설정할 수 있습니다.
- 두 개의 연결 팩토리 각각에 대해, 세션 풀 최대 연결 값을 12로 설정하십시오.
- 다시, 각각의 하위(servant) 영역에 12개의 작업자 스레드가 있습니다. 이 예제에서는 단일 연결 팩토리 CF1만 사용하려고 합니다.
- 두 리스너 포트 LP1 및 LP2 각각은 연결 팩토리 CF1에 맵핑됩니다. 메시지 구동 Bean MDB1, MDB2 및 MDB3는 세 가지의 고유 애플리케이션 EAR 파일의 일부입니다. MDB1은 LP1로 맵핑되지만, MDB2 및 MDB3는 각각 LP2로 맵핑됩니다.
- 이 시점까지, 연결 팩토리 CF1에 대해 세 개의 연결이 필요하다는 것을 계산했습니다. 그러나 메시지를 큐에 넣고 동일한 연결 팩토리 CF1을 사용하는 서블릿 컴포넌트도 있습니다. 따라서 연결 팩토리 CF1의 경우, 연결 풀 최대 연결 수 설정은 15 = 3 + 12입니다.