![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
비ASF 리스너 포트를 사용한 엄격한 메시지 순서 지정
무작위로 도착하는 메시지를 처리하기 위해 특수한 기능을 애플리케이션에 코딩하지 않은 경우 메시지 구동 Bean 애플리케이션을 IBM MQ 메시징 제공자에 배치할 때 엄격한 메시지 순서 지정을 달성할 수 있습니다.
WebSphere® Application Server 버전 7
이상의 경우 리스너 포트는 안정화되었습니다. 자세한 정보는 안정화된 기능에 대한 항목을 참조하십시오. 리스너 포트 사용에서 활성화 스펙 사용까지의 WebSphere MQ 메시지 구동 Bean 배치 구성을 마이그레이션해야 합니다. 비ASF 모드에 대한 활성화 스펙을 구성하는 방법에 대한 자세한 정보는 비ASF 모드에 대한 활성화 스펙 구성을 참조하십시오. 그러나 애플리케이션이 WebSphere Application Server 버전 7 이전의 애플리케이션 서버에서 작업할 필요가 없음을 확신할 때까지 이러한 마이그레이션을 시작하지 않아야 합니다.
예를 들어, 버전 6.1의 일부 멤버와 이후 버전의 일부 멤버를 사용하는 애플리케이션 서버 클러스터가 있는 경우 클러스터의 모든 애플리케이션 서버를 이후 버전으로 마이그레이션하기 전에는 활성화 스펙을 사용하기 위해 해당 클러스터의 애플리케이션을 마이그레이션하지 않아야 합니다.
- MDB(메시지 구동 Bean) 애플리케이션이 트랜잭션입니다.
- IBM MQ 큐의 백아웃 임계값(BOTHRESH)이 0으로 설정되어 있습니다.
순서 지정된 전달을 위한 WebSphere Application Server 구성
- NON.ASF.RECEIVE.TIMEOUT IBM MQ 메시지 리스너 서비스 사용자 정의 특성에 대해 0이 아닌 제한시간 값을 지정하여 비ASF 모드를 활성화해야 합니다.
- 리스너 포트의 최대 세션 설정을 1로 설정해야 합니다.
- 최대 세션이 1로 설정된 비ASF 리스너 포트에는 메시지를 검색하는 애플리케이션 서버 내에서 실행 중인 단일 스레드가 있습니다. 메시지가 도착하면 스레드가 즉시 메시지를 MDB로 전달합니다.
- 큐 관리자는 이 스레드를 메시지를 검색하는 단일 애플리케이션으로 간주하므로 메시지가 순서대로 처리됩니다.
트랜잭션 복구 중에 이 배치를 사용하여 메시지를 무작위로 전달 가능
이런 시나리오가 발생하려면 특정한 이벤트 세트가 특정한 순서로 발생해야 하는데 그런 경우는 드뭅니다. 그러나 애플리케이션 조작에 순서 지정된 메시지 전달이 중요한 경우에는 이를 고려해야 합니다.
- 다음 컴포넌트 중 하나의 실패를 복구하는 중에 이 배치 옵션을 사용할 경우 무작위 메시지 전달이 발생할 수 있습니다.
- MDB를 호스트하는 애플리케이션 서버
- IBM MQ 큐 관리자
- 애플리케이션 서버 및 큐 관리자를 연결하는 네트워크
- MDB 트랜잭션의 2단계 커미트 중에 이 컴포넌트 중 하나가 실패할 경우 컴포넌트를 다시 사용할 수 있게 되면 애플리케이션 서버 트랜잭션 관리자가 큐 관리자에 대한 연결을 다시 설정하여 트랜잭션을 해결합니다.
- 이 복구 프로세스는 비동기적이고 트랜잭션 복구 프로세스가 완료되기 전에 MDB로 새로운 메시지 전달을 시작할 수 있습니다. 트랜잭션 복구 결과 트랜잭션이 롤백될 경우 새로운 메시지가 이미 전달된 후 메시지는 WebSphere MQ 큐로 리턴되고 애플리케이션에 다시 전달됩니다.
클러스터 배치에 대한 고려사항
비ASF 리스너 포트를 사용 중인 경우 큐의 기본 공유 (DEFSOPT) 옵션을 exclusive로 설정할 수 있습니다. 애플리케이션의 클러스터 배치를 수행할 때 이 옵션을 선택한 경우 하나의 클러스터 멤버를 제외한 모든 멤버가 리스너 포트를 시작하지 못합니다. 클러스터 멤버가 WMSG0057E 메시지에서 2042MORC_OBJECT_IN_USE 예외를 생성합니다.
이 예외가 발생할 경우 WebSphere Application Server에서 다음 메시지 리스너 서비스 사용자 정의 특성을 구성하여 애플리케이션에 대한 자동 장애 복구를 설정할 수 있습니다.
- MAX.RECOVERY.RETRIES
- 클러스터에 있는 모든 서버의 메시지 리스너 서비스에서 높은 값의 MAX.RECOVERY.RETRIES를 구성합니다. MAX.RECOVERY.RETRIES의 최대값은 2147483647입니다.
- MAX.RECOVERY.RETRIES 메시지 리스너 서비스 사용자 정의 특성에는 적절한 MAX.RECOVERY.INTERVAL 메시지 리스너 서비스 사용자 정의 특성이 수반되어야 합니다. 리스너 포트가 수동으로 중지 및 다시 시작되지 않고 재시도할 수 있는 최대 시간은 MAX.RECOVERY.INTERVAL에 지정된 값의 2147483647배입니다. 이 구성에서는 활성 클러스터 멤버가 중지되고 큐 관리자가 하나의 독점적인 이용자로 이 멤버가 연결될 수 있도록 허용할 때까지 각 클러스터 멤버는 지속적으로 해당하는 리스너 포트 시작을 시도합니다.