처음에는 메시지 트리에 메시지 플로우의 입력 노드가 채워집니다.
입력 노드가 입력 메시지를 수신하면, 등록 정보(Properties) 트리(메시지 트리의 첫 번째 서브트리)를 작성하고 이 트리를 메시지 플로우에서 구성한 노드 등록 정보로 채웁니다. 그런 다음 입력 메시지 비트스트림의 컨텐츠를 조사하여 이들 컨텐츠를 반영하는 나머지 메시지 트리를 작성합니다. 이 프로세스는 메시지가 수신되는 전송에 의해 제어되는 입력 노드 자체의 일부 범위에 따라 정해집니다.
입력 노드는 먼저 MQMD 구문 분석기를 호출하여 해당 헤더에 대한 서브트리를 작성합니다.
메시지는 MQMD 다음에 0개 이상의 추가 헤더를 가질 수 있는데, 이들 헤더는 다음 헤더의 형식을 정의하는 한 헤더의 형식 필드를 사용하여 메시지 본문의 형식을 정의하는 마지막 헤더까지 포함해서 함께 체인되어 있습니다. 체인에 MQRFH 및 MQRFH2 헤더가 있는 경우, 이들 두 헤더 중 하나의 이름/값 데이터는 다음 데이터의 형식에 대한 정보를 포함할 수도 있습니다. 형식에 지정된 값은 인식되는 구문 분석기이며, 항상 이름/값 데이터보다 우선순위를 가집니다.
브로커는 적절한 구문 분석기를 호출하여 다음 메시지의 체인에 따라 각 헤더를 해석합니다. 각 헤더는 독립적으로 구문 분석됩니다. 단일 헤더 내의 필드는 구문 분석기에서 관리하는 순서에 따라 구문 분석됩니다. 선택한 순서를 추측하거나 의지할 수는 없지만 필드가 구문 분석되는 순서는 헤더 내에서 필드가 나타나는 순서에 영향을 주지 않습니다.
브로커는 메시지 본문 앞에 오는 헤더의 무결성이 유지보수되는지를 확인합니다. 메시지 각 부분의 형식은 헤더 바로 앞에 있는 형식 필드(다음 부분이 인식된 WebSphere MQ 형식일 경우) 또는 MQRFH 또는 MQRFH2 헤더에 설정된 값으로 정의됩니다.
이 프로세스는 메시지 본문 앞에 있는 헤더 수에 따라 원하는 횟수만큼 반복됩니다. 이 필드는 사용자가 채우지 않아도 됩니다. 브로커가 이 순서를 핸들링합니다.
브로커는 헤더의 형식 필드가 올바르게 메시지의 각 부분을 식별하는지 확인하기 위해 이 프로세스를 완료합니다. 이를 수행하지 않는 브로커면 WebSphere MQ는 메시지를 전달하지 못할 수도 있습니다. 메시지 본문 구문 분석기가 인식되는 WebSphere MQ 헤더 형식이 아니므로 브로커가 마지막 헤더의 형식 필드에서 이 값을 MQFMT_NONE 값으로 바꿉니다. 메시지 본문의 컨텐츠에 대한 정보를 보유하기 위해 해당 필드의 원래 값은 MQRFH 또는 MQRFH2 헤더 내의 도메인 필드에 저장됩니다. MQRFH 또는 MQRFH2가 없는 경우, 정보는 등록 정보 트리에 저장됩니다.
예를 들면, MQRFH2 헤더가 메시지 본문의 바로 앞에 있고 해당 형식 필드가 XML로 설정되어 있으면(일반 XML 구문 분석기를 사용하여 메시지 본문을 구문 분석해야 한다고 표시), MQRFH2 도메인 필드는 XML로 설정되어 있고 해당 형식 필드는 MQFMT_NONE으로 재설정됩니다.
이 조치를 수행하면 브로커가 바꾼 ESQL 표현식에 의해 정보가 명시적으로 저장됩니다.
모든 헤더가 구문 분석되고 메시지 트리 내에 해당 서브트리가 작성되면, 입력 노드는 지정된 구문 분석기를 메시지 본문과 연관시킵니다. 메시지 본문 컨텐츠와 연관될 구문 분석기를 지정해야 합니다. 메시지 내의 헤더(예: MQRFH2 헤더 내의 <mcd> 폴더(일반 권장) 또는 입력 노드 등록 정보(메시지가 헤더를 포함하지 않을 경우에 권장)에 대해 이를 수행할 수 있습니다. 입력 노드는 아래 설명된 대로 연관시킵니다.
SCADAInput 노드는 리스너가 TCP/IP 포트에서 수신하는 입력 메시지의 MQRFH2 헤더를 사용하여 WebSphere MQ형식 메시지를 작성합니다.
메시지 본문은 성능상의 이유로 구문 분석되지 않습니다. 메시지 플로우 구성에 메시지 본문의 구문 분석이 필요하지 않을 수도 있습니다. 본문은 메시지 플로우 중에 컨텐츠를 참조하는 경우에만 구문 분석됩니다.
예를 들면, Root.XML.Field(또는 Compute 노드의 InputRoot.XML.Field) 또는 Root.MRM.Field를 참조할 때 메시지 본문이 구문 분석됩니다. 메시지 플로우에서 발생하는 경로에 따라 이 구문 분석이 다른 지점에서 발생할 수 있습니다. 이러한 처음 필요할 때 구문 분석 접근 방법을 부분 구문 분석이라고도 하며, 정상 처리 시에는 메시지 플로우의 논리에 영향을 미치지 않습니다. 그러나 메시지 플로우 내의 오류 핸들링에 설명된 대로 오류 핸들링 시나리오에 대한 몇 가지 힌트가 나와 있습니다.
메시지 플로우가 둘 이상의 메시지 도메인에 있는 메시지를 승인하도록 할 경우, 입력 노드가 메시지 도메인 및 관련 메시지 정의 정보(세트, 유형 및 형식)를 추출하는 메시지에 MQRFH2 헤더를 포함시킬 수 있습니다.
사용자 정의 구문 분석기를 식별하기 위해 입력 노드 등록 정보 또는 메시지 헤더를 설정한 경우, 메시지 해석 및 논리적 트리 구성 방법이 여기에 설명된 방법과 다를 수 있습니다.
헤더가 없거나 이들 헤더가 메시지 본문에 대한 구문 분석기를 지정하지 않는 경우, 메시지 본문 구문 분석기를 정의하도록 입력 노드 등록 정보를 설정해야 합니다. 그렇게 하지 않은 경우, 메시지는 BLOB로 취급됩니다. 사용자 정의 구문 분석기를 지정할 수 있습니다.
지정된 구문 분석기가 입력 노드에 의해 메시지 본문과 연관되며(WebSphere MQ Enterprise Transport, WebSphere MQ Mobile Transport 및 WebSphere MQ Telemetry Transport 프로토콜에 대해서와 같은 방식으로) 메시지 본문은 구문 분석되지 않습니다.
사용자 정의 구문 분석기를 식별하기 위해 입력 노드 등록 정보 또는 메시지 헤더를 설정한 경우, 메시지 해석 및 논리적 트리 구성 방법이 여기에 설명된 방법과 다를 수 있습니다.
이 인터페이스는 자동으로 메시지에 대한 Properties 서브트리를 생성하지 않습니다(이 서브트리는 메시지 트리 구조에 설명됨). 메시지에 등록 정보 서브트리가 있어야 하는 것은 요구사항은 아니지만, 입력 노드에 관계없이 일관성있는 메시지 트리 구조를 제공하기 위해서는 서브트리를 작성하는 것이 유용하다는 것을 알게 될 것입니다. 메시지 트리 내에 등록 정보 서브트리를 작성하려는 경우, 사용자 정의 입력 노드를 사용 중이면 이를 직접 수행해야 합니다.
정의된 메시지 도메인을 준수하지 않는 메시지를 처리해야 할 경우, C 언어 프로그래밍 인터페이스를 사용하여 새 사용자 정의 구문 분석기를 작성할 수 있습니다.
구문 분석기의 사용 방법 및 작동을 수정하도록 구성할 수 있는지 여부를 이해하려면 노드 인터페이스를 참조하십시오. 노드가 사용자 정의 구문 분석기를 사용할 경우, 메시지에 대해 작성된 트리 구조는 내장 구문 분석기에 대해 작성된 트리 구조와 약간 다를 수 있습니다. 사용자 정의 입력 노드는 입력 메시지를 완전히 구문 분석하거나 필요할 때 메시지 본문을 구문 분석하는 부분 구문 분석에 참여할 수 있습니다.
C 또는 Java로 사용자 고유의 출력 및 메시지 처리 노드를 작성할 수도 있습니다.