ASF 모드에서 메시지 처리 방법
ASF 모드에서는 메시지 구동 bean(MDB)에 적합한 메시지가 발견되는 경우에만 서버 세션 및 스레드가 작업에 할당됩니다. MDB에서 동시에 처리할 수 있는 스레드 수는 리스너 포트의 Maximum Sessions 특성 값으로 판별됩니다.
WebSphere® Application Server 버전 7
이상의 경우 리스너 포트는 안정화되었습니다. 자세한 정보는 안정화된 기능에 대한 항목을 참조하십시오. 리스너 포트 사용에서 활성화 스펙 사용까지의 WebSphere MQ 메시지 구동 Bean 배치 구성을 마이그레이션해야 합니다. 비ASF 모드에 대한 활성화 스펙을 구성하는 방법에 대한 자세한 정보는 비ASF 모드에 대한 활성화 스펙 구성을 참조하십시오. 그러나 애플리케이션이 WebSphere Application Server 버전 7 이전의 애플리케이션 서버에서 작업할 필요가 없음을 확신할 때까지 이러한 마이그레이션을 시작하지 않아야 합니다.
예를 들어, 버전 6.1의 일부 멤버와 이후 버전의 일부 멤버를 사용하는 애플리케이션 서버 클러스터가 있는 경우 클러스터의 모든 애플리케이션 서버를 이후 버전으로 마이그레이션하기 전에는 활성화 스펙을 사용하기 위해 해당 클러스터의 애플리케이션을 마이그레이션하지 않아야 합니다.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)

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

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