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