사용자 엑시트는 사용자가 제공하는 사용자 정의 소프트웨어를 사용 가능하게 하여
WebSphere Message Brokers의 메시지 플로우를 통해 전달되는 데이터를 트랙할 수 있습니다.
메시지가 메시지 플로우를 따라 전달될 때 메시지의 라이프사이클 동안 특정 지점에서
사용자 제공 함수를 호출할 수 있으며 유틸리티 함수를 호출하여 플로우의 해당 지점에 대한 정보와 메시지 어셈블리의 컨텐츠 정보를 조회할 수 있습니다.
사용자 엑시트는 다음 이벤트 중 하나 이상이 발생할 경우 호출될 수 있습니다.
- 작업 단위(UOW) 또는 트랜잭션의 끝(COMMIT/ROLLBACK)
- 두 노드 사이에서 메시지 전달
- 입력 소스의 큐에서 메시지 삭제
위에 표시된 기본 메시지 플로우의 경우 다음의 두 레벨에서 메시지를 트랙할 수 있습니다.
트랜잭션 레벨에서 다음 이벤트를 트랙할 수 있습니다.
노드 레벨에서 다음 이벤트를 트랙할 수 있습니다.
- 한 노드에서 다른 노드로 메시지 전달
- 노드에 필요한 처리 완료
이는 다음 순서로 발생하는 네 가지 다른 유형의 이벤트가 있음을 의미합니다.
- 입력 소스 큐에서 메시지 삭제(플로우에서 읽기)
- 처리를 위해 노드로 메시지 전달
- 노드 처리 완료
- 트랜잭션 종료
위의 다이어그램에서는 MQInput 노드가 예로 사용되었지만 해당 기능은 사용자 정의 노드를 포함한
모든 입력 노드에 해당됩니다. 그러나 내장 노드와 사용자 정의 노드는 사용자 엑시트를 호출하는
방법에서 약간의 차이가 있습니다. 내장 입력 노드의 경우 사용자 엑시트는 외부 소스에서
데이터를 읽은 후에 최대한 빨리 호출됩니다. 사용자 정의 입력 노드의 경우 노드가 메시지를 전달하기 직전에 사용자 엑시트가 호출됩니다.
위의 예제에서 이벤트 4가 트랜잭션의 종료 시에 발생합니다.
사용자 엑시트는 트랜잭션이 완료된 이후에 호출되므로 사용자 엑시트 처리는 해당 트랜잭션의 일부가 아닙니다.
사용자 엑시트는 플로우에서 완료되는 트랜잭션 처리가 없을 경우에도 호출됩니다.
메시지 플로우 등록 정보 확약 수가 1보다 클 경우 이벤트 1과 이벤트 4 간에는 다대일 비율이 성립합니다.
또한 이는 특정 입력 노드에 고유한 일부 시나리오에서도 해당됩니다(예: MQInputNode 구성 시
메시지 그룹별 확약 등록 정보를 선택한 경우).
임의의 수의 이벤트를 트랙하기 위해 사용자 엑시트를 작성할 수 있습니다. 이들 이벤트 각각에 대해
사용자 엑시트에서 다음 데이터를 사용할 수 있습니다. 별도로 언급되지 않는 한 모든 액세스는 읽기 전용입니다.
- 큐에서 삭제 메시지:
- 비트스트림
- 입력 노드
- Environment 트리(읽기/쓰기)
- 노드로 전달되는 메시지:
- Message 트리
- LocalEnvironment 트리(읽기/쓰기)
- 예외 목록
- Environment 트리(읽기/쓰기)
- 소스 노드
- 대상 노드
- 노드 처리 완료:
- Message 트리
- LocalEnvironment 트리(읽기/쓰기)
- 예외 목록
- Environment 트리(읽기/쓰기)
- 노드
- 업스트림 노드
- 예외(있는 경우)
- 트랜잭션 종료:
- 입력 노드
- 예외(있는 경우)
- Environment 트리(읽기/쓰기)
다중 사용자 엑시트를 등록할 수 있으며, 이를 등록할 경우 정의된 순서로 엑시트가 호출됩니다(mqsichangeflowuserexit 명령 참조). 사용자 엑시트에서 작성한 모든 메시지 어셈블리 변경사항은 후속 사용자 엑시트에 표시됩니다.
사용자 엑시트가 호출되면 다음 정보가 조회됩니다.
- 메시지 플로우 정보:
- 메시지 플로우 이름
- 브로커 이름
- 브로커의 큐 관리자 이름
- 실행 그룹 이름
- 메시지 플로우의 확약 수 등록 정보
- 메시지 플로우의 확약 간격 등록 정보
- 메시지 플로우의 통합 트랜잭션 등록 정보
- 노드 정보:
- 노드 이름
- 노드 유형
- 터미널 이름
- 노드 등록 정보
- 메시지 어셈블리 탐색 및 읽기(Message,LocalEnvironment,ExceptionList)
- Environment 트리 탐색 및 읽기/쓰기
사용자 엑시트는 구성을 다시 전개하지 않고 동적인 기초에서 등록이 가능합니다.