C 사용자 정의 메시지 처리 노드 수명 주기

이 주제에서는 C 프로그래밍 언어에 대한 사용자 정의 메시지 처리 노드 수명 주기의 여러 단계를 안내합니다. 작성되고 폐기되는 오브젝트 및 다음 단계에서 호출되는 구현 함수 및 클래스에 대해 다룹니다.

이 항목의 정보는 출력 노드 및 메시지 처리 노드에 적용됩니다. 메시지 처리 노드가 메시지 처리에 사용되고 출력 노드가 비트스트림 형식으로 출력을 제공하는 데 사용되지만 어느 한 유형의 노드를 사용하여 이러한 기능 중 하나를 수행할 수 있으므로 두 노드 유형을 함께 고려할 수 있습니다.

등록

사용자 정의 메시지 처리 노드는 노드가 들어 있는 LIL이 운영 체제에 의해 로드되고 초기화될 때 브로커에 등록됩니다.

브로커는 bipGetMessageflowNodeFactory를 호출하여 LIL의 함수와 LIL의 호출 방법을 설정합니다.

bipGetMessageflowNodeFactory 함수는 cniCreateNodeFactory 함수를 호출하고 이 함수는 LIL이 지원하는 모든 노드의 팩토리 또는 그룹 이름을 리턴합니다.

그런 다음, LIL은 유틸리티 함수 cniDefineNodeClass를 호출하여 각 노드의 이름과 구현 함수의 함수 포인터에 대한 가상 함수 테이블을 전달합니다.

인스턴스화

인스턴스화 단계 중에 사용자 정의 메시지 처리 노드의 인스턴스가 작성됩니다. 인스턴스화 단계는 브로커가 메시지 플로우를 작성할 때 시작되고 해당 메시지 플로우의 사용자 정의 노드를 인스턴스화할 때마다 cniCreateNodeContext 함수를 호출합니다. cniCreateNodeContext 함수는 해당 노드 유형의 cniDefineNodeClass로 전달된 CNI_VFT struct의 iFpCreateNodeContext 필드에 지정되는 함수입니다. 이 함수는 구성된 속성 값을 보관할 수 있도록 하는 사용자 정의 노드의 인스턴스화용 메모리를 포함하여 해당 노드에 필요한 자원을 할당합니다.

브로커는 다음과 같은 경우 노드 인스턴스를 작성하고 cniCreateNodeContext를 호출합니다.
  • 메시지 플로우가 작성됨
    • 브로커가 시작됨(사용자가 mqsistart를 실행함). 브로커가 시작되면 이미 전개된 메시지 플로우가 재작성됩니다.
    • 실행 그룹이 다시 로드됨(사용자가 mqsireload를 실행함). 실행 그룹이 다시 로드되면 이미 전개된 메시지 플로우가 재작성됩니다.
    • 실행 그룹 내에 심각한 오류가 발생하여 실행 그룹이 재시작됨
  • 메시지 플로우가 다시 전개됨. 메시지 플로우가 변경되고 다시 전개되면 브로커는 플로우의 모든 노드를 삭제한 후 새 구성으로 재작성하여 다시 전개를 처리합니다.
주: 실행 그룹을 시작할 때는 메시지 플로우가 작성되지 않습니다. 실행 그룹을 정지하면 모든 플로우만 정지하며 플로우가 삭제되거나 프로세스가 다운되지 않습니다. 실행 그룹을 재시작하면 메시지 플로우가 시작되지만 재작성되지는 않습니다.

cniCreateContext 내에서 사용자 정의 확장은 메시지 처리 노드에 포함된 입력 및 출력 터미널을 설정할 수 있도록 두 함수, 즉 cniCreateInputTerminalcniCreateOutputTerminal을 호출합니다.

처리

사용자 정의 메시지 처리 노드 수명 주기의 처리 단계에서는 입력 메시지에 대한 특정 처리 조작이 발생할 때 특정 방식으로 메시지가 변환됩니다.

브로커가 큐에서 메시지를 검색하고 해당 메시지가 사용자 정의 노드의 입력 터미널에 도착할 때, 브로커는 구현 함수 cniEvaluate를 호출합니다. 이 함수는 메시지를 통해 수행할 작업을 결정합니다.

사용자 정의 메시지 처리 노드에서 여러 노드 유틸리티 함수를 사용하여 메시지 데이터 액세스, ESQL 액세스, 메시지 오브젝트 변환 및 메시지 전달과 같은 메시지 처리 기능을 수행할 수 있습니다. 메시지를 처리하기 위해 사용할 노드 유틸리티 함수를 cniEvaluate 함수에 포함시켜야 합니다.

이 인터페이스는 메시지의 등록 정보 서브트리를 자동으로 생성하지 않습니다. input 노드에 상관없이 일관된 메시지 트리 구조를 제공하려면 등록 정보 서브트리를 작성하는 것이 유용할 수 있지만, 메시지가 필수적으로 등록 정보 서브트리를 가지는 것은 아닙니다. 메시지 내에 등록 정보 서브트리를 작성하려 할 때 사용자 정의 입력 노드를 사용 중이면, 사용자 스스로 이 작업을 수행해야 합니다.

폐기

사용자 정의 메시지 처리 노드가 메시지를 처리한 후, 사용된 시스템 자원을 해제하고 컨텍스트와 같이 메시지를 구성하고 처리할 때 획득한 노드 인스턴스 특정 데이터 영역을 해제하기 위해 노드가 제거되었는지 확인해야 합니다.

사용자 정의 메시지 처리 노드 인스턴스는 브로커가 cniDeleteNodeContext 함수를 호출할 때 제거됩니다.

브로커는 노드의 인스턴스가 삭제될 때 cniDeleteNodeContext를 호출합니다. 다음 이벤트로 인해 노드가 삭제될 수 있습니다.
  • 실행 그룹 프로세스의 제어된 종결
    • 브로커가 정지됨(사용자가 mqsistop를 실행함)
    • 실행 그룹이 다시 로드됨(사용자가 mqsireload를 실행함)
    • 실행 그룹 내에 심각한 오류가 발생하여 실행 그룹이 재시작됨
    주: 실행 그룹 정지는 여기에 포함되지 않습니다. 실행 그룹을 정지하면 모든 플로우만 정지하며 플로우가 삭제되거나 프로세스가 다운되지 않습니다.
  • 메시지 플로우가 삭제됨. 예를 들어 메시지 플로우는 도구의 브로커 관리 Perspective에서 삭제됩니다.
  • 메시지 플로우가 다시 전개됨. 메시지 플로우가 변경되고 다시 전개되면 브로커는 플로우의 모든 노드를 삭제한 후 새 구성으로 재작성하여 다시 전개를 처리합니다.
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
as01394_