ASF 모드에서 메시지 처리 방법
ASF 모드에서는 메시지 구동 bean(MDB)에 적합한 메시지가 발견되는 경우에만 서버 세션 및 스레드가 작업에 할당됩니다. MDB에서 동시에 처리할 수 있는 스레드 수는 리스너 포트의 Maximum Sessions 특성 값으로 판별됩니다.
WebSphere® Application Server 버전 7이상의 경우 리스너 포트가 안정화되었습니다. 자세한 정보는 안정화된 기능에 대한 주제를 읽으십시오. 리스너 포트 사용에서 활성화 스펙 사용으로 WebSphere MQ 메시지 구동 Bean 배치 구성을 마이그레이션하도록 계획해야 합니다. 그러나 애플리케이션이 WebSphere Application Server 버전 7이전의 애플리케이션 서버에서 작동할 필요가 없다고 확신할 때까지 이 마이그레이션을 시작하지 마십시오. 예를 들어, 버전 6.1 의 일부 멤버와 이후 버전의 일부 멤버가 있는 애플리케이션 서버 클러스터가 있는 경우, 클러스터의 모든 애플리케이션 서버를 이후 버전으로 마이그레이션할 때까지 해당 클러스터의 애플리케이션을 마이그레이션하여 활성화 스펙을 사용하지 않아야 합니다.

- 리스너 포트가 시작되면, IBM MQ 큐 매니저에 대한 연결을 열고 내부 큐 에이전트를 생성합니다.
- 큐 에이전트가 JMS 대상으로부터의 메시지를 청취합니다.
- 큐 에이전트가 메시지를 발견합니다.
- 큐 에이전트는 메시지가 리스너 포트를 사용하는 MDB에 적합한지를 검사합니다.
- 메시지가 MDB에 적합한 경우 리스너 포트가 메시지 리스너 서비스 스레드 풀의 스레드를 할당하고 애플리케이션 서버의 서버 세션 풀에서 서버 세션을 할당합니다. 리스너 포트가 시작된 후로 서버 세션을 처음 사용하는 경우 JMS 제공자에 대한 연결을 엽니다. 할당된 서버 세션은 할당된 스레드에서 실행됩니다.
- 큐 에이전트가 메시지의 ID를 서버 세션에 전달합니다. 그런 다음 메시지 청취를 다시 시작합니다.
- 서버 세션이 메시지 ID를 사용하여 대상에서 메시지를 검색합니다.
- 서버 세션은 MDB의
메소드를 호출하여 메시지를 처리합니다.onMessage() - 메시지를 처리하면 서버 세션이 종료되며 애플리케이션 서버 세션 풀로 리턴합니다. 다음 번에 서버 세션을 사용할 때 연결을 다시 설정할 필요가 없도록 서버 세션이 JMS 제공자에 대해 연 연결은 열린 상태로 남아 있습니다.
- 스레드가 종료되고 메시지 리스너 서비스 스레드 풀로 리턴합니다.
MDB에서 동시에 처리할 수 있는 스레드 수는 리스너 포트의 Maximum Sessions 특성 값으로 판별됩니다. Maximum Sessions 를 기본값 1로 설정하면 MDB가 한 번에 하나의 메시지만 처리할 수 있음을 의미합니다. 따라서 큐 에이전트는 첫 번째 메시지 처리가 완료되기 전에 두 번째 메시지를 찾는 경우 첫 번째 메시지 처리를 완료하고 서버 세션이 사용 가능해질 때까지 큐 에이전트는 두 번째 메시지를 차단합니다.
- 큐 에이전트가 첫 번째 메시지를 발견하고 첫 번째 예에서와 같이
스레드와 서버 세션을 할당합니다. 메시지는 MDB의
onMessage()메소드를 사용하여 처리됩니다. - 첫 번째 메시지를 처리하는 동안 큐 에이전트가 메시지 청취를 다시 시작합니다.
- 큐 에이전트가 두 번째 메시지를 발견하고 두 번째 스레드와
두 번째 서버 세션을 할당합니다. 메시지는 MDB의
onMessage()메소드를 사용하여 처리됩니다. - 첫 번째 메시지를 처리하면 첫 번째 서버 세션이 종료되며 서버 세션 풀로 리턴합니다. 첫 번째 스레드가 종료되고 스레드 풀로 리턴합니다.
- 두 번째 메시지를 처리하면 두 번째 서버 세션이 종료되고 서버 세션 풀로 리턴합니다. 두 번째 스레드가 종료되고 스레드 풀로 리턴합니다.
다음 다이어그램은 메시지 리스너 서비스가 ASF 모드에서 작동할 때 WebSphere Application Server 과 IBM MQ 간에 메시징이 어떻게 이루어지는지 보여줍니다.

- 리스너 포트가 시작되면, IBM MQ 큐 매니저에 대한 연결을 열고 내부 큐 에이전트를 생성합니다.
- 큐 에이전트가 JMS 대상으로부터의 메시지를 청취합니다.
- 큐 에이전트가 메시지를 발견하고 해당 메시지가 리스너 포트를 사용하는 MDB에 적합한지를 검사합니다.
- 메시지가 MDB에 적합한 경우 큐 에이전트가 메시지 ID를 작업 레코드에 전달합니다. 그런 다음 작업 레코드를 워크로드 관리(WLM) 큐에 보냅니다.
- 큐 에이전트가 메시지 청취를 다시 시작합니다.
- WLM 큐가 작업 레코드를 처리하도록 하위 영역에 있는 ASF 디스패처를 시작합니다.
- ASF 디스패처가 서버 세션 풀에서 서버 세션을 할당합니다.
- 서버 세션이 작업 레코드의 메시지 ID를 사용하여 대상에서 메시지를 검색합니다.
- 서버 세션은 MDB의
메소드를 호출하여 메시지를 처리합니다.onMessage() - 메시지를 처리하면 서버 세션이 종료되며 애플리케이션 서버 세션 풀로 리턴합니다. 다음 번에 서버 세션을 사용할 때 연결을 다시 설정할 필요가 없도록 서버 세션이 JMS 제공자에 대해 연 연결은 열린 상태로 남아 있습니다.
- 스레드가 종료되고 메시지 리스너 서비스 스레드 풀로 리턴합니다.
MDB에서 동시에 처리할 수 있는 스레드 수는 리스너 포트의 Maximum Sessions 특성 값으로 판별됩니다. Maximum Sessions 를 기본값 1로 설정하면 MDB가 한 번에 하나의 메시지만 처리할 수 있음을 의미합니다. 따라서 큐 에이전트는 첫 번째 메시지 처리가 완료되기 전에 두 번째 메시지를 찾는 경우 첫 번째 메시지 처리를 완료하고 서버 세션이 사용 가능해질 때까지 큐 에이전트는 두 번째 메시지를 차단합니다.
- 큐 에이전트가 첫 번째 메시지를 발견하고 첫 번째 예에서와 같이 작업 레코드를 설정합니다.
- 작업 레코드를 WLM 큐에 보내고 하위 영역에 ASF 디스패처가 설정됩니다.
- ASF 디스패처는 서버 세션을 할당하고 메시지는
onMessage()메소드를 사용하여 처리됩니다. - 첫 번째 메시지를 처리하는 동안 큐 에이전트가 메시지 청취를 다시 시작합니다.
- 큐 에이전트가 두 번째 메시지를 발견하고 두 번째 스레드와
두 번째 서버 세션을 할당합니다. 메시지는 MDB의
onMessage()메소드를 사용하여 처리됩니다. - 첫 번째 메시지를 처리하면 첫 번째 서버 세션이 종료되며 서버 세션 풀로 리턴합니다. 첫 번째 스레드가 종료되고 스레드 풀로 리턴합니다.
- 두 번째 메시지를 처리하면 두 번째 서버 세션이 종료되고 서버 세션 풀로 리턴합니다. 두 번째 스레드가 종료되고 스레드 풀로 리턴합니다.