이 항목의 정보는 출력 노드 및 메시지 처리 노드에 적용됩니다. 메시지 처리 노드가 메시지 처리에 사용되고 출력 노드가 비트스트림 형식으로 출력을 제공하는 데 사용되지만 어느 한 유형의 노드를 사용하여 이러한 기능 중 하나를 수행할 수 있으므로 두 노드 유형을 함께 고려할 수 있습니다.
사용자 정의 메시지 처리 노드는 노드가 들어 있는 LIL이 운영 체제에 의해 로드되고 초기화될 때 브로커에 등록됩니다.
브로커는 bipGetMessageflowNodeFactory를 호출하여 LIL의 함수와 LIL의 호출 방법을 설정합니다.
bipGetMessageflowNodeFactory 함수는 cniCreateNodeFactory 함수를 호출하고 이 함수는 LIL이 지원하는 모든 노드의 팩토리 또는 그룹 이름을 리턴합니다.
그런 다음, LIL은 유틸리티 함수 cniDefineNodeClass를 호출하여 각 노드의 이름과 구현 함수의 함수 포인터에 대한 가상 함수 테이블을 전달합니다.
인스턴스화 단계 중에 사용자 정의 메시지 처리 노드의 인스턴스가 작성됩니다. 인스턴스화 단계는 브로커가 메시지 플로우를 작성할 때 시작되고 해당 메시지 플로우의 사용자 정의 노드를 인스턴스화할 때마다 cniCreateNodeContext 함수를 호출합니다. cniCreateNodeContext 함수는 해당 노드 유형의 cniDefineNodeClass로 전달된 CNI_VFT struct의 iFpCreateNodeContext 필드에 지정되는 함수입니다. 이 함수는 구성된 속성 값을 보관할 수 있도록 하는 사용자 정의 노드의 인스턴스화용 메모리를 포함하여 해당 노드에 필요한 자원을 할당합니다.
cniCreateContext 내에서 사용자 정의 확장은 메시지 처리 노드에 포함된 입력 및 출력 터미널을 설정할 수 있도록 두 함수, 즉 cniCreateInputTerminal과 cniCreateOutputTerminal을 호출합니다.
사용자 정의 메시지 처리 노드 수명 주기의 처리 단계에서는 입력 메시지에 대한 특정 처리 조작이 발생할 때 특정 방식으로 메시지가 변환됩니다.
브로커가 큐에서 메시지를 검색하고 해당 메시지가 사용자 정의 노드의 입력 터미널에 도착할 때, 브로커는 구현 함수 cniEvaluate를 호출합니다. 이 함수는 메시지를 통해 수행할 작업을 결정합니다.
사용자 정의 메시지 처리 노드에서 여러 노드 유틸리티 함수를 사용하여 메시지 데이터 액세스, ESQL 액세스, 메시지 오브젝트 변환 및 메시지 전달과 같은 메시지 처리 기능을 수행할 수 있습니다. 메시지를 처리하기 위해 사용할 노드 유틸리티 함수를 cniEvaluate 함수에 포함시켜야 합니다.
이 인터페이스는 메시지의 등록 정보 서브트리를 자동으로 생성하지 않습니다. input 노드에 상관없이 일관된 메시지 트리 구조를 제공하려면 등록 정보 서브트리를 작성하는 것이 유용할 수 있지만, 메시지가 필수적으로 등록 정보 서브트리를 가지는 것은 아닙니다. 메시지 내에 등록 정보 서브트리를 작성하려 할 때 사용자 정의 입력 노드를 사용 중이면, 사용자 스스로 이 작업을 수행해야 합니다.
사용자 정의 메시지 처리 노드가 메시지를 처리한 후, 사용된 시스템 자원을 해제하고 컨텍스트와 같이 메시지를 구성하고 처리할 때 획득한 노드 인스턴스 특정 데이터 영역을 해제하기 위해 노드가 제거되었는지 확인해야 합니다.
사용자 정의 메시지 처리 노드 인스턴스는 브로커가 cniDeleteNodeContext 함수를 호출할 때 제거됩니다.