시작하기 전에
WebSphere Message Broker에서는 두 개의 샘플 사용자 정의 노드, 즉 SwitchNode 및 TransformNode의 소스를 제공합니다. 현재 상태에서 이 노드를 사용하거나 수정할 수 있습니다. 또한, C로 작성된 메시지 처리 노드를 포함하여 사용자 정의 노드 사용을 보여주는 User-defined Extension 샘플을 볼 수 있습니다.
LIL(Loadable Implementation Library)는 C 노드(또는 구문 분석기)용 구현 모듈입니다. LIL은 DLL(Dynamic Link Library)로 구현되며 파일 확장자는 .dll이 아니라 .lil입니다.
개발자가 작성해야 하는 구현 함수는 C 노드 구현 함수에 나열되어 있습니다. 이 프로세스를 돕기 위해 WebSphere Message Broker가 제공하는 유틸리티 함수는 C 노드 유틸리티 함수에 나열되어 있습니다.
WebSphere Message Broker에서는 두 개의 샘플 사용자 정의 노드, 즉 SwitchNode 및 TransformNode의 소스를 제공합니다. 현재 상태에서 이 노드를 사용하거나 수정할 수 있습니다. 사용할 User-defined Extension 샘플도 있습니다.
개념 상, 메시지 처리 노드는 메시지를 특정 방식으로 처리하는 데 사용되고 출력 노드는 메시지를 비트스트림으로 출력하는 데 사용됩니다. 그러나, 메시지 처리 노드와 출력 노드는 코딩할 때 근본적인 공통점이 있습니다. 메시지 처리를 출력 노드 내에서 수행할 수 있으며 마찬가지로 메시지 처리 노드를 사용하여 메시지를 비트스트림으로 출력할 수 있습니다. 간단히 말해, 이 주제에서는 주로 메시지 처리 노드로서의 노드에 관해 언급하지만, 두 가지 유형의 노드의 기능성을 설명합니다.
브로커에 사용자 정의 노드를 선언 및 정의하려면 초기화 함수인 bipGetMessageflowNodeFactory를 LIL에 반드시 포함해야 합니다. 다음 단계는 구성 스레드에서 발생하며 브로커가 초기화 함수를 호출하는 방법 및 초기화 함수가 사용자 정의 노드를 선언하고 정의하는 방법을 간략히 설명합니다.
브로커를 시작할 때마다 또는 메시지 플로우를 새 값으로 재전개할 때 속성이 설정됩니다. 구성 스레드에서 사용자 코드를 호출하여 브로커가 속성을 설정합니다. 사용자 코드는 향후 메시지 처리 시 사용하기 위해 이 속성을 노드 컨텍스트 영역에 저장해야 합니다.
{ const CciChar* ucsAttr = CciString("nodeTraceSetting", BIP_DEF_COMP_CCSID) ; insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_INTEGER); _setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constZero); free((void *)ucsAttr) ; } { const CciChar* ucsAttr = CciString("nodeTraceOutfile", BIP_DEF_COMP_CCSID) ; insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_STRING); _setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constSwitchTraceLocation); free((void *)ucsAttr) ; }
브로커가 큐에서 메시지를 검색하고 해당 메시지가 사용자 정의 메시지 처리 또는 출력 노드의 입력 터미널에 도착할 때, 브로커는 구현 함수 cniEvaluate를 호출합니다. 이 함수는 메시지 처리 스레드에서 호출되고 메시지로 수행할 사항을 결정해야 합니다. 특히 추가 인스턴스가 사용될 경우 이 함수는 다중 스레드에서 호출될 수 있습니다.