Message Map 샘플 정보

샘플 맵은 다양한 브로커링 시나리오를 구현하는 설계 패턴을 보여줍니다. 메시지 맵 도구 설계를 사용하여 설계 패턴을 복합 패턴으로 함께 결합할 수 있습니다. 이렇게 하면 더 간단한 시나리오의 설계 패턴을 함께 어셈블하여 복합 시나리오의 메시지 맵을 작성할 수 있습니다. 샘플 파일은 전개가 가능하도록 설계되지 않았습니다.

전체 메시지 어셈블리 핸들링

전체 메시지 어셈블리 처리를 위한 샘플 파일은 메시지 맵 샘플 메시지 플로우 프로젝트의 message_assembly 폴더에 있습니다.

메시지 어셈블리는 메시지의 모든 헤더와 본문 또는 페이로드(payload)의 조합니다. 메시지 플로우의 Mapping, DataInsert, DataUpdate, DataDelete 및 Extract 노드는 항상 전체 메시지 어셈블리를 처리합니다. 이는 이와 같은 노드의 맵핑이 항상 메시지 어셈블리 모델을 맵의 소스 및 대상으로 표시함을 의미합니다.

WebSphere Message Broker에는 두 가지의 메시지 어셈블리 모델인 단순 등록 정보 모델과 전체 헤더 모델이 있습니다. 어느 것을 선택할 지는 사용자의 시나리오 요구사항과 일치하는 모델을 선택하는 데 따라 달라집니다. 왼쪽 그림은 메시지 어셈블리의 등록 정보 모델을 표시하고 오른쪽 그림은 헤더 메시지 어셈블리 모델을 표시합니다.

등록 정보 어셈블리

등록 정보 어셈블리

WebSphere Message Broker 메시지 어셈블리에는 그림에 번호가 매겨진 네 개의 항목이 포함되어 있습니다.

  1. LocalEnvironment 폴더
  2. Properties 폴더
  3. 전송 계층 메시지 헤더 그룹
  4. 메시지 페이로드 또는 본문

맵핑 노드 중 하나 다음에 Route To Label 건너뛰기를 수행하도록 메시지 플로우를 구성할 수 있습니다. 이는 플로우 내 컨텐츠 기반 라우팅 시나리오에서 유용합니다.

이 샘플에서는 세 가지의 공통 시나리오가 구현됩니다.

모든 경우에서 메시지의 본문 또는 페이로드(payload)가 메시지 어셈블리의 마지막 항목으로 제공됩니다.

맨 위로 돌아가기

맵으로 메시지 플로우 처리 제어

맵핑 노드 다음에 메시지 라우팅을 제어하려면 메시지 어셈블리 labelName 요소를 사용하십시오. 이는 다음 메시지 플로우 노드를 선택하여 맵을 통한 처리를 계속하려는 시나리오에서 유용합니다.

다음 그림은 Mapping 노드, Route To Label 노드 및 몇몇 목적지 Label 노드로 구성된 샘플 메시지 플로우 파일 RouteToLabelUsingMap.msgflow를 보여줍니다. Label 노드의 대상 목적지 레이블은 이름과 같도록 구성됩니다.

Route To Label 메시지 플로우

출력 메시지를 처리하는 Label 노드를 선택하려면 맵이 Label 노드 레이블 이름 등록 정보를 지정해야 합니다. 샘플 맵 파일 SetLabelNodeLabelName.msgmap은 두 개의 condition과 하나의 else가 있는 if 행을 사용하여 이를 처리합니다.

Route To Label 메시지 맵

이 샘플은 다음과 같습니다.

맨 위로 돌아가기

모든 헤더 복사

종종 맵은 독점적으로 메시지 본문에 초점을 맞춥니다. 이 시나리오에서는 모든 헤더가 변경되지 않고 맵에 의해 복사됩니다.

변경되지 않은 모든 헤더를 복사하려면 등록 정보 모델을 사용하십시오. 단순화된 등록 정보 메시지 어셈블리 모델을 선택할 경우에는 등록 정보 폴더를 제외한 모든 메시지 헤더가 순서대로 변경되지 않고 복사됩니다.

등록 정보 메시지 맵을 작성하면 $source/Properties 복합 요소를 $target/Properties 복합 요소에 맵핑하십시오. 그러면 등록 정보 폴더가 다른 변경되지 않은 모든 헤더와 함께 변경되지 않은 상태로 소스에서 대상으로 복사됩니다.

아래의 이미지는 모든 헤더(등록 정보 포함)가 변경되지 않고 복사되도록 구성된 샘플 파일 CopyAllHeaders.msgmap를 보여줍니다.

모든 헤더 복사

맨 위로 돌아가기

등록 정보 맵핑

Properties 모델을 사용하면 복잡하게 여러 헤더를 처리하지 않고도 많은 브로커 시나리오를 사용할 수 있습니다. Properties는 MQ Series 및 MRM 구문 분석기에 대해 중요한 대부분의 헤더 속성을 추출하여 단일 패키지로 표시합니다. 모든 헤더 복사 시나리오 외에도, MQ Series가 전송 계층이고 MRM이 메시지 본문 구문 분석기인 상황에서 Properties 모델을 사용하십시오. 속성은 다음과 같은 범주로 분류할 수 있습니다.

Properties 모델

  1. 메시지의 물리적 형식
  2. 전송 계층 "QOS"
  3. 응답 경로 정보
  4. Publish/Subscribe 토픽

유의해야 할 점은 Properties 모델의 모든 필드를 설정해야 하는 것입니다. MessageFormat과 같은 단일 필드를 설정하여 출력 메시지 Wire 형식을 선택해야 할 경우, Properties 폴더에서 다른 값도 설정하거나 복사하십시오. 명시적으로 설정되지 않은 필드는 출력 메시지에 복사되지 않습니다.

맨 위로 돌아가기

헤더 맵핑

Headers 모델은 등록 정보 외에 선택된 헤더를 맵핑할 수 있는 기능을 제공합니다. Headers 모델은 "모든 헤더 복사" 기능을 지원하지 않습니다. 명시적으로 맵핑되지 않는 헤더는 대상의 부분으로 작성되지 않습니다.

헤더는 MQMD, MQ, HTTP 및 JMS 헤더로 분류됩니다. JMS, JMS를 통한 SOAP 및 HTTP 시나리오의 경우 Headers 모델을 사용하십시오. Properties 모델에서 필요한 제어를 제공하지 않을 경우에는 MQ 시나리오에 Headers 모델을 사용하십시오.

  1. MQ 그룹에는 MQMD 및 MQRFH2 헤더가 포함됩니다. 이는 헤더 구조 정의이며 런타임 시 맵핑은 자동으로 소스 구문 분석기를 처리합니다. MQRFH2 대상의 경우, 맵핑은 브로커 버전 5에서 동적으로 MQRFH2 구문 분석기를 선택하고 브로커 버전 6에서는 더 높은 성능의 MQRFH2C 구문 분석기를 선택합니다.
    MQRFH2 헤더를 맵핑하는 메시지 맵의 모든 ESQL 다운스트림은 (모든 헤더 복사 기능을 사용하여 복사하는 것과 반대로) 이 헤더의 올바른 구문 분석기 이름으로 구성해야 합니다.
  2. HTTP 그룹에는 모든 표준 헤더가 포함되며 기타 HTTP 헤더는 무시됩니다. 사용자 정의 HTTP 헤더를 처리해야 할 경우에는 아래에 설명된 대로 맵을 호출하도록 ESQL Compute 노드를 구성해야 합니다.
  3. JMS 그룹에는 표준 JMS 헤더가 포함됩니다. 사용자 정의 버전을 처리하려면 메시지 세트에서 사용자 정의 JMS 헤더를 정의하고 아래에 설명된 대로 맵을 호출하도록 ESQL Compute 노드를 구성해야 합니다.
헤더 모델

맨 위로 돌아가기

다중 출력 메시지 작성

다중 출력 메시지 시나리오를 위한 샘플 파일은 Message Map Sample Message Flows 프로젝트의 multiple_output 폴더에 있습니다.

여러 개의 출력 메시지를 작성하기 위한 기본 규칙은 여러 개의 $target 행을 묵시적이나 명시적으로 선언하는 것입니다. for 행을 사용하여 여러 개의 행을 묵시적으로 선언할 수 있습니다. for 행을 사용하면 0개 이상의 출력 메시지가 작성됩니다(for 행 소스로 제공되는 소스 항목당 하나씩). 또한 소스 및 대상 추가 메뉴를 사용하여 둘 이상의 대상을 명시적으로 추가함으로써 여러 개의 출력 메시지를 작성할 수 있습니다. 각각의 대상은 하나의 출력 메시지를 작성합니다. 소스의 각 항목이 자체적으로 여러 개의 출력 메시지를 작성할 경우에는 for 행을 여러 개의 대상과 결합할 수도 있습니다.

메시지 맵이 여러 개의 메시지를 출력하도록 구성하는 데 유용한 몇 가지의 시나리오가 있습니다. 일부 시나리오는 다음과 같습니다.

메시지 맵 도구를 사용하면 여러 개의 출력 메시지를 쉽게 생성할 수 있습니다. 단지 for 행에서 대상 메시지 어셈블리를 인클로즈하거나 여러 개의 대상 메시지 어셈블리를 지정하면 됩니다.

맨 위로 돌아가기

반복 필드의 다중 출력 메시지 작성

이 시나리오의 샘플 파일은 Message Map Sample Message Flows 프로젝트의 multiple_output 폴더에 있습니다.

반복하는 소스 필드의 여러 출력 메시지를 작성하기 위해 필요한 조치는 for 행에서 반복 소스에 대해 작동하는 대상 메시지 어셈블리를 엔클로즈하는 것이 전부입니다.

샘플 메시지 맵 repeating_source.msgmap는 소스 메시지 어셈블리의 반복 필드를 호출하는 메시지 플로우에서 메시지 어셈블리 스트림으로 변환합니다. repeating_source.msgmapfor 행에서 $target 행을 랩핑하여 여러 개의 출력 메시지 어셈블리를 작성합니다(반복되는 입력마다 하나씩). 어셈블리마다 등록 정보 폴더가 복사됩니다. 즉, 모든 헤더 복사 작동이 사용됩니다. 그런 다음 각각의 출력 메시지 어셈블리에서 단일 rtl:body가 복사됩니다.

반복 배치

맨 위로 돌아가기

멀티파트 입력 메시지의 다중 출력 메시지 작성

이 시나리오의 샘플 파일은 Message Map Sample Message Flows 프로젝트의 multipart_messages 폴더에 있습니다.

반복 필드에서와 같이, 반복되는 멀티파트 소스 메시지에 대해 여러 개의 출력 메시지를 작성하기 위해 필요한 조치는 for 행에서 반복되는 멀티파트 메시지 정의에 대해 작동하는 대상 메시지 어셈블리를 엔클로즈하는 것이 전부입니다.

멀티파트 메시지와 일반적인 반복 필드 사이의 주요 차이점은, 멀티파트 메시지는 open 또는 open-defined 컨텐츠 모델을 사용하여 로컬 컨텐츠 그룹으로 정의(XML 스키마로의 브로커 확장)되는 반면 반복 필드는 요소로 정의된다는 점입니다.

멀티파트 메시지에서 다른 메시지 맵 구조체를 도입하기 보다는, 컨텐츠가 XML 스키마 와일드카드인 경우와 같이 컨텐츠 그룹이 처리됩니다. XML 스키마 와일드카드 요소의 맵을 작성할 경우 호출된 서브맵을 사용해야 합니다.

샘플에 표시된 것처럼, 와일드카드 요소는 요소 특정의 서브맵을 사용하여 맵핑됩니다. 실제로 와일드카드나 "unknown" 요소는 서브맵 호출에 의해 "known" 요소로 변환됩니다.

반복 배치

맨 위로 돌아가기

반복되지 않는 입력의 다중 출력 메시지 작성

이 시나리오의 샘플 파일은 Message Map Sample Message Flows 프로젝트의 multiple_output 폴더에 있는 nonrepeating_source.msgmap에 있습니다.

여러 메시지를 생성하는 기술은 소스의 반복 여부에 관계없이 동일합니다. 이 경우, 맵에 의해 여러 개의 $target 행이 명시적으로 선언됩니다. 선언된 각 대상 행은 하나의 출력 메시지를 작성합니다. 반복 시나리오에서는 대상 어셈블리를 포함하는 for 행으로 여러 개의 어셈블리가 묵시적으로 선언되고 for에서 항목마다 하나의 출력 어셈블리가 작성되었습니다.

반복 배치

맨 위로 돌아가기

메시지에서 필드 정렬, 그룹화 또는 조합

이 시나리오의 샘플 파일은 Message Map Sample Message Flows 프로젝트의 sorting 폴더에 있습니다. 테마는 두 가지로 변형할 수 있습니다.

미리 알려진 키로 정렬

맵 작성 시 정렬 키 값을 알 수 있을 경우의 정렬 및 그룹화는 파일 sorting.msgmap에 설명되어 있습니다. 세 가지의 가능한 필드 값이 반복되지 않는 입력의 다중 출력 메시지 작성 설계 패턴을 사용하여 세 가지의 개별 메시지로 정렬됩니다.

단일 메시지를 여러 개의 메시지로 변환한 후에는 자주 레코드 수와 총계를 계산해야 합니다. 이 계산은 total.msgmap 파일에서 두 번째 단계로 처리해야 합니다. 메시지 플로우 sort.msgflow는 결과를 얻기 위해 두 개의 맵핑 노드를 연결하는 방법을 설명합니다.

데이터베이스의 키로 정렬

샘플 파일은 sorting_dynamic.msgmap입니다. 이 샘플은 미리 알려진 키로 정렬과 아주 유사하지만 결정적인 차이점은 올바른 키 목록을 얻기 위해서는 맵이 데이터베이스로 이동해야 한다는 것입니다. 맵의 단계는 다음과 같습니다.

이전 예와 같이, 올바른 출력 메시지를 갖도록 하는 것으로는 충분하지 않으므로 다시 total.msgmap 맵을 호출하여 출력 메시지마다 총계를 계산해야 합니다.

맨 위로 돌아가기

ESQL에서 맵 호출

샘플 파일은 Message Map Sample Message Flows 프로젝트의 esql_calling_msgmap 폴더에 있습니다.

샘플은 ESQL에서 맵을 호출하는 방법을 보여줍니다. 사용자가 기본 맵보다는 서브맵을 호출할 것으로 예상합니다. 서브맵은 다른 맵이나 ESQL에서 호출되도록 할 메시지 맵입니다. 이 맵은 다른 맵에서 호출될 수 있으며... 단일 선택 단추를 선택하여 새 메시지 맵 마법사(파일>새로 작성>메시지 맵)에서 서브맵을 작성하십시오.

새 메시지 맵 마법사에서 서브맵 작성

서브맵을 호출하기 위해 예상되는 ESQL 서명은 다음과 같습니다.

	submapName(
		sourcePath1, [sourcePath2, [...]]
		[targetPath, ]
		InputLocalEnvironment [, OutputLocalEnvironment])
	

최소 하나의 sourcePath 매개변수가 항상 존재합니다. 이는 메시지 플로우 노드를 구동하는 메시징 입력을 표시합니다. sourcePath는 메시지 맵을 호출하기 전에 소스 트리 노드를 참조하기 위해 초기화된 ESQL REFERENCE 변수입니다.

targetPath는 대상 루트 트리 노드를 참조하는 선택적 ESQL REFERENCE 변수입니다. 메시지 맵을 호출하기 전에 초기화해야 합니다. targetPath는 선택사항이지만 메시지 맵에 대상 매개변수가 없으면 맵이 어떤 메시징 출력도 작성하지 못합니다. 관계 데이터베이스 시나리오의 메시지에 사용되며, 여기에서 맵은 ESQL Database 노드에서 호출됩니다.

InputLocalEnvironament 및 OutputLocalEnvironment는 연관된 ESQL 노드 상관 이름에 대해 초기화된 ESQL REFERENCE 변수입니다. 메시지 맵은 스키마 범위 프로시저로 구현되므로 상관 이름에 직접 액세스할 수 없습니다.

샘플 코드는 필수 매개변수를 초기화하고 맵을 호출합니다.

맨 위로 돌아가기

집계 시나리오에서 메시지 맵 사용

샘플 파일은 Message Map Sample Message Flows 프로젝트의 esql_calling_msgmap 폴더에 있습니다.

맵을 호출하는 ESQL의 기본 패턴이 구현되었습니다. ESQL MODULE 코드는 PropertiesHeaders 폴더를 초기화하고 필요한 참조를 작성하며 맵을 호출하기 위해 작성되었습니다.

맵은 모든 Aggregate 노드 폴더(Request1, Request2 등)에서 단일 출력 메시지를 구성합니다. ESQL MODULE이 등록 정보와 헤더를 처리했으므로, LocalEnvironment.Aggregate.AgregateRequestFolderName의 컨텐츠를 출력 메시지에 복사만 하면 됩니다.

맨 위로 돌아가기

XML 스키마 시나리오

이 샘플 시나리오는 메시지 맵에서 와일드카드, 유형 확장 및 제한, 대체 그룹 및 컨텐츠 모델 그룹을 사용하는 XML 스키마 모델을 변환하기 위한 설계 패턴을 보여줍니다.

맨 위로 돌아가기

와일드카드 요소

와일드카드 요소 및 속성을 처리하기 위한 샘플 파일은 Message Map Sample Message Flows 프로젝트의 multipart_messages 폴더에 있습니다.

와일드카드 요소는 서브맵을 호출하여 처리합니다. 서브맵에서는 요소의 이름이 하드코딩됩니다. 동일한 와일드카드를 통해 다른 요소 이름을 처리하려면 if, conditionelse 행을 사용하십시오.

샘플은 단순한 반복 필드 시나리오를 구현하지만 약간 복잡한 경우에는 반복하는 소스가 브로커 멀티파트 메시지로 모델화됩니다. 멀티파트 메시지는 맵 도구에 의해 와일드카드 요소로 처리됩니다. 와일드카드는 올바른 요소 이름의 서브맵을 호출하여 처리됩니다.

첫 번째 맵에서 대상 메시지 어셈블리는 for 행에 포함됩니다. for 행은 단일 소스 메시지에 의해 포함된 반복되는 멀티파트 메시지에 대해 작동합니다. for 행에 대상 어셈블리가 포함된다는 것은 전체 대상 메시지 어셈블리가 출력됨을 의미합니다(소스에 있는 입력 멀티파트 메시지마다 하나씩). 첫 번째 메시지 맵에는 멀티파트 메시지를 지원하는 와일드카드 메시지의 맵핑도 포함됩니다. 이 맵핑은 와일드카드가 표시하는 요소의 완료된 전체 정의를 리턴해야 하는 서브맵을 호출합니다.

멀티파트 인벨로프 메시지

두 번째 맵에서는 와일드카드 메시지 요소가 rtl:body 요소가 되도록 제한되었음을 알 수 있습니다. 이 서브맵에서는 소스와 대상이 동일하므로 소스를 복사(deep copy)하여 대상을 작성합니다.

멀티파트 제한 메시지

맨 위로 돌아가기

유형 상속

이 시나리오의 샘플 파일은 Message Map Sample Message Flows 프로젝트의 xmlschema 폴더에 있는 type_to_substitutiongroup.msgmap입니다.

메시지 맵 편집기에서는 올바른 유형 조합을 표시하기 위해 특수한 소스 및 대상 트리 '폴더'가 사용됩니다. 폴더의 이름은 specializations for base type입니다. 폴더 내에는 추상이 아닌, 기본 유형으로부터의 모든 파생과 결합된 요소가 표시됩니다. 이와 같은 구체적 요소 표현에는 각각 전체 컨텐츠가 포함되므로 가능한 모든 속성 다음에는 모든 올바른 요소가 있습니다. 중요한 것은 트리가 XML 스키마 모델이 설명하는 다른 XML 요소를 표시한다는 것입니다.

샘플 메시지 맵에서, 소스는 대체로 extensionType1extensionType2를 허용하는 XML 스키마 모델을 사용하여 설명됩니다. 이 대체사항은 각각 개별적으로 대상에 맵핑될 수 있습니다.

샘플이 복잡하지 않아도 유형 확장 계층을 선택하는 모델, 대체 그룹 등과 결합할 수 있습니다.

맨 위로 돌아가기

대체 그룹

이 시나리오의 샘플 파일은 Message Map Sample Message Flows 프로젝트의 xmlschema 폴더에 있는 type_to_substitutiongroup.msgmap입니다.

메시지 맵 편집기에서는 대체 그룹 조합을 사용하여 올바른 요소를 표시하기 위해 특수한 소스 및 대상 트리 '폴더'가 사용됩니다. 폴더의 이름은 head element를 대체합니다. 폴더 내에는 추상이 아닌, 기본 유형으로의 모든 파생과 결합된 다른 요소 이름이 표시됩니다. 이와 같은 구체적 요소 표현에는 각각 전체 컨텐츠가 포함되므로 가능한 모든 속성 다음에는 모든 올바른 요소가 있습니다. 중요한 것은 트리가 XML 스키마 모델이 설명하는 다른 XML 요소를 표시한다는 것입니다.

샘플 메시지 맵에서, 대상은 추상 HeadElement 요소에 대한 대체로 Substitute1Substitute2를 허용하는 XML 스키마 모델을 사용하여 설명됩니다. 이 대체사항은 각각 개별적으로 소스에 맵핑될 수 있습니다.

샘플이 이처럼 복잡하지 않아도 대체 그룹을 유형 계층과 결합할 수 있습니다.

맨 위로 돌아가기

모델 그룹 반복

이 시나리오의 샘플 파일은 >Message Map Sample Message Flows 프로젝트의 modelgroups 폴더에 있습니다.

맨 위로 돌아가기

기본 페이지 아이콘   샘플 홈으로 돌아가기