메시지
EMS(Enterprise Message Service) 메시지에는 JMS 메시지와 같이 머리글, 속성 및 본문의 세 가지 개별 부분이 포함됩니다. 헤더는 EMS 메시지에서 유일하게 필수적인 부분입니다. 이 항목에서는 Microsoft BizTalk Adapter for TIBCO Enterprise Message Service에서 메시지를 처리하는 방법에 대해 설명합니다.
참고
오케스트레이션에서 헤더 필드(예: 메시지 우선 순위 또는 상관 관계 ID 설정) 또는 메시지 속성을 설정하거나 검색하려면 솔루션 탐색기 사용하여 프로젝트의 Microsoft.BizTalk.Adapters.TIBCOEMSProperties.dll 대한 참조를 추가해야 합니다.
메시지 헤더에는 값을 포함한 미리 정의된 필드들이 있습니다. BizTalk Adapter for TIBCO Enterprise Message Service는 어떤 항목을 헤더에 설정할 수 있는지 알고 있습니다. 읽기 전용 값을 설정하려고 하면 어댑터가 속성{} 섹션에서 값을 리디렉션하거나 설정합니다.
다음 예제에서는 Properties= { Destination={String:Queue[Q2]} }를 확인합니다. Properties
는 문자열을 포함하는 속성이고 문자열의 내용은 Q2입니다. Destination 섹션과는 관계가 없습니다. 여기에는 다른 곳에 갈 수 없는 설정 값 문자열이 포함되므로 어댑터에서 이 값을 이 섹션에 넣은 것입니다.
ReplyTo
속성을 오케스트레이션에서 설정하여 최종 소비자에게 응답을 보낼 위치를 알릴 수 있습니다. EMS는 Destination
TIBCOEMS에서 메시지를 받을 때 속성을 설정합니다. 이 두 번째 속성은 TIBCOEMS로부터 메시지를 받는 오케스트레이션에서 읽기 전용이며 오케스트레이션에서 편집할 수 없습니다.
예를 들어, 오케스트레이션 내에서 메시지를 발송하고 동적으로 대상을 설정할 수 없습니다. Destination 값은 메시지가 전송되는 포트에서 설정합니다.
메시지를 다른 큐로 발송하려면 각 큐에 대해 송신 포트를 만들어야 합니다. 그러면 오케스트레이션에서 메시지에 할당할 포트를 결정할 수 있습니다.
다음 메시지 예제에서 Destination= {Queue[Q1]}
는 읽기 전용입니다. 이 값은 서버에서 메시지를 받으면 TIBCOEMS가 설정합니다. Destination의 값인 Q1은 전송 속성에서 옵니다.
TextMessage={
Header={ MessageID={ID:EMS-SERVER.824437A58B11C75F4:1}
Destination={Queue[Q1]}
' This is READONLY. It gets set by the server when the
' message is received by the server (EMS). It is set in the
' Transport Properties when you specify that you want to
' listen for messages on Q1.
ReplyTo={}
DeliveryMode={Persistent}
Redelivered={False}
CorrelationID={}
MsgType={}
Timestamp={12/1/2005 11:59:01 PM}
Expiration={0}
Priority={1} }
Properties={ Destination={String:Queue[Q2]} }
' This is a property that contains a string, and the
' contents of the string is Q2. This has nothing to do with
' the Destination section above – it is just another
' property that is set.
' This is in the schema. The adapter knows what it can and
' cannot set in an EMS header. The values that the adapter
' cannot set are put in the Properties section.
text={<?xml version="1.0" encoding="utf-16"?>
<ns0:Employees xmlns:ns0="http://BizTalk_Server_Project1.Employee">
<Emp Id="Id_0">
Name>Name_0</Name>
</Emp>
</ns0:Employees>
}
헤더에는 값을 포함한 미리 정의된 필드들이 있으며, 어댑터는 이러한 값을 오케스트레이션에 사용할 수 있도록 BizTalk Server 메시지 컨텍스트로 승격합니다. 승격된 속성의 정의는 JMS 사양 및 TIBCO Enterprise Message Service 확장에서 정의되는 표준 헤더 속성과 동일합니다. 2를 제외한 모든 속성은 EMS에서 받은 오케스트레이션에 사용할 수 있으며 ReplyTo
오 Destination
케스트레이션에서 사용할 수 있도록 올바르게 매핑할 수 없는 대상을 단일 속성으로 설명합니다.
BizTalk Adapter for TIBCO EMS는 TIBCOEMS 속성을 문자열 유형에 매핑하고 Destination 문자열 표현을 사용합니다. 또는 StatisTopic[topicname]
와 같습니다StaticQueue[queuename]
. 오케스트레이션은 에 대한 ReplyTo
값을 설정할 수 있으며 어댑터는 헤더의 유효한 대상 개체로 바꿉니다.
어댑터는 스키마를 제공하고 오케스트레이션에서 사용할 수 있는 모든 TIBCO EMS 헤더 속성을 설명하는 어셈블리를 참조합니다. 이 속성은 수신 메시지를 필터링하거나 나가는 메시지에 추가하는 데 사용할 수 있습니다. 오케스트레이션 필터에 적용되는 규칙은 EMS 서버의 메시지 선택기에 적용되는 규칙과 다릅니다. 예를 들어 오케스트레이션은 또는 TibcoEMS.Destination
속성을 필터링 TibcoEMS.ReplyTo
할 수 있지만 이 동일한 속성에서 메시지 선택기를 허용하는 JMS 사양은 지원되지 않습니다.
오케스트레이션에서 이러한 속성을 정의한 경우에는 JMS 메시지의 헤더 속성에 포함됩니다. 또는 EMS 메시지를 받았을 때 이러한 헤더 속성이 BizTalk Server 메시지 컨텍스트에 복사됩니다.
속성이 포트 구성과 일치하는 경우에는 메시지의 속성 값이 포트 구성보다 우선적으로 적용됩니다. 예를 들어 포트에는 우선 순위가 4로 설정되어 있는데 오케스트레이션 논리에서는 메시지 우선 순위가 9로 설정된 경우, TIBCO EMS에서 수신되는 메시지의 우선 순위는 9입니다.
다음 표에서는 BizTalk Adapter for TIBCO Enterprise Message Service에서 각 속성을 사용하는 방법에 대해 설명합니다.
Name | 형식 | Description |
---|---|---|
TibcoEMS.MessageID | string | 호출을 보내면 각 메시지에 고유한 ID가 할당되어 헤더에 기록됩니다. 모든 메시지 ID 값은 이 목적을 위해 예약된 세 글자의 접두사 ID로 시작합니다. 읽기 전용입니다. 값을 변경해도 메시지에는 영향을 주지 않습니다. |
TibcoEMS.Timestamp | long | 호출을 보내면 헤더에 UTC 타임스탬프가 기록됩니다. 이 값은 서버에서 메시지를 받은 시간을 대략적으로 나타냅니다. 값은 1970년 1월 1일부터 경과된 시간을 밀리초 단위로 나타냅니다. 읽기 전용입니다. 값을 변경해도 메시지에는 영향을 주지 않습니다. |
TibcoEMS.Redelivered | boolean | 서버는 메시지가 이전에 배달된 메시지를 복제할 수 있는지 여부를 나타내는 헤더를 설정합니다. - false - 서버가 이전에 이 메시지를 소비자에게 전달하려고 시도하지 않았습니다. - true - 서버가 이전에 이 메시지를 소비자에게 전달하려고 했지만 소비자가 적시에 승인을 반환하지 않았을 가능성이 높지만 보장되지는 않습니다. 읽기 전용입니다. 값을 변경해도 메시지에는 영향을 주지 않습니다. |
TibcoEMS.Destination | string | 호출을 보내면 메시지의 대상(큐 또는 항목)이 이 헤더에 기록됩니다. 형식은 대상에서 문자열로 적용됩니다. 형식에 대해서는 이전에 설명했습니다. 읽기 전용입니다. 값을 변경해도 메시지에는 영향을 주지 않습니다. |
TibcoEMS.DeliveryMode | string | 두 가지 가능한 값인 PERSISTENT 및 NON-PERSISTENT이 있습니다. 기본값은 PERSISTENT 모드입니다. 어댑터는 BizTalk Server로 보낸 메시지를 승인하기 전에 EMS의 승인을 기다립니다. 이 헤더 속성 및 포트 구성 항목은 EMS가 이 승인을 어댑터로 보내는 시간과 메시지 전송의 안정성을 제어합니다. PERSISTENT 배달 모드 사용 - EMS 서버는 EMS 서버에서 메시지가 성공적으로 지속될 때까지 기다립니다. 그러면 메시지가 큐에 도착하게 됩니다. PERSISTENT 모드 배달을 사용할 경우에는 다음을 고려하십시오. 메시지가 클수록 BizTalk Server에서 메시지를 보낸 것으로 판단하는 데 걸리는 시간이 길어집니다. NON-PERSISTENT 모드 사용 - EMS 서버는 메시지가 지속되기 전에 승인을 반환합니다. EMS 서버에서 오류가 발생할 경우 BizTalk Server에서는 성공적으로 보낸 것으로 간주하기 때문에 메시지가 손실될 수 있습니다. |
TibcoEMS.Expiration | long | 메시지가 만료되기 전에 유지되는 시간의 길이입니다. 이 값을 0으로 설정하면 메시지가 만료되지 않습니다. 유지 시간은 밀리초 단위로 지정합니다. |
TibcoEMS.Priority | int | 0부터 9까지의 숫자 등급을 사용하여 메시지 우선 순위를 일반 또는 긴급으로 정의합니다. 숫자가 크면 우선 순위가 높습니다. |
TibcoEMS.CorrolationID | string | 요청 메시지에 응답 메시지를 연결하는 경우와 같은 메시지 연결에 사용할 수 있습니다. 일반적으로 이 값 EMS.JMSMessageID 은 와 동일합니다. 일반적으로 속성과 EMS.JMSReplyTo 함께 사용됩니다. |
TibcoEMS.ReplyTo | 문자열 | 메시지 회신을 보낼 대상입니다. 형식은 및 포트의 구성과 동일합니다 EMS.JMSDestination . |
TibcoEMS.Type | 문자열 | 메시지 유형(텍스트, 바이트, 문자열 등)을 설명하지 않습니다. 일부 JMS 제공업체는 메시지 저장소를 사용하여 메시지 유형 정의를 저장합니다. 클라이언트 프로그램은 이 필드에 값을 저장하여 저장소의 정의를 참조할 수 있습니다. EMS는 이 헤더를 지원하지만 사용하지는 않습니다. JMS 사양에서는 표준 메시지 정의 저장소를 정의하거나 메시지 유형 정의에 명명 정책을 정의하지 않습니다. 일부 제공업체는 각 응용 프로그램 메시지에 메시지 유형 정의를 요구합니다. 이러한 제공업체와의 호환성을 보장하기 위해 클라이언트 프로그램은 클라이언트 응용 프로그램에서 사용하지 않는 경우에도 이 헤더를 설정할 수 있습니다. 클라이언트에서 이식성을 보장하기 위해 리터럴이 아닌 심볼 값으로 이 헤더를 설정하고 제공업체의 저장소와 일치하도록 구성할 수 있습니다. |
통합자는 BizTalk Server 메시지 컨텍스트로 승격할 속성 집합을 정의하고 그 후에 JMS 메시지의 속성 부분에 속성을 추가할 수 있습니다. 통합자는 스키마를 만드는 동안 속성 유형을 정의하는 시기를 관리합니다. 이 속성 값을 메시지 선택기에서 사용하는 경우 속성 유형에 따라 특정 작업이 유효하지 않은 경우도 있습니다. 예를 들어 메시지 선택기 myMessageProperty > 5 를 사용하는 경우 속성은 정수 값으로 정의되어야 하며 어댑터는 메시지에 값을 정수 값으로 넣습니다. 속성을 승격하려면 속성 이름이 EMSX로 시작해야 합니다. 또한 미리 정의된 속성과 동일한 이름을 사용하면 안 됩니다.
BizTalk Adapter for TIBCO Enterprise Message Service는 이 섹션에 표시할 수 있는 EMS 및 JMS 관련 속성을 선언하는 스키마와 어셈블리를 제공합니다. 이 설정은 생략된 내용을 모두 포함하도록 확장할 수 있습니다. 메시지 컨텍스트에서 참조된 모든 EMSX 속성은 EMS 메시지의 메시지 속성 섹션에 들어갑니다. 자세한 내용은 TIBCO EMS 사용자 가이드를 참조하십시오.
EMS는 JMS 사양에 열거된 모든 메시지(텍스트, 바이트, 스트림, 맵 및 개체)를 지원합니다. TIBCO EMS용 BizTalk Adapter는 텍스트 메시지 유형만 지원합니다.
JMS에서는 텍스트 유형의 메시지에 XML 형식의 본문을 포함하지 않아도 됩니다. 어댑터는 메시지 본문을 처리하지 않습니다. 수신된 대로 BizTalk Server 제공됩니다. 따라서 어댑터가 BizTalk에 제출한 메시지는 항상 XML 데이터로 구문 분석되지 않을 수 있습니다.
메시지를 EMS 서버에서 지속시켜 구독자에게 정확하게 한 번 배달되도록 할 수 있지만 어댑터의 성능이 심각하게 저하될 수 있습니다. 메시지를 보내면 EMS는 어댑터에 메시지 수신을 승인하기 전에 로컬 저장소에 메시지를 저장합니다. 이 속성은 오케스트레이션에서 메시지별로 설정할 수도 있고 포트에서 처리하는 모든 메시지에 대해 설정할 수도 있습니다.
메시지를 수신할 때 어댑터에서 항목에 등록되지 않은 메시지가 누락될 수 있습니다. 구독이 없는 경우 항목에 게시되는 메시지는 EMS에서 지속되지 않습니다. 어댑터에는 현재 구독되어 있지 않은 경우에도 메시지 게시를 수신할 방법이 필요합니다. 하지만 지속 메시지의 사용과 마찬가지로 이 방법 역시 EMS 성능을 심각하게 저하시킬 수 있으며 필요하지 않을 수도 있습니다.
참고
EMS의 시점에서 수신하는 방법도 있지만 이 방법은 구현되어 있지 않으며 별로 바람직하지도 않습니다. 이 부분은 항목에서만 문제가 되고 큐는 영향을 받지 않습니다. 주식 시세와 같이 시간에 따라 변경되는 데이터에는 일반적으로 항목이 사용됩니다. 특정 주식 시세를 놓치더라도 나중에 다시 해당 정보가 게시될 것이라는 것을 알고 있습니다.
따라서 포트 구성에서는 EMS 서버의 메시지 지속 여부를 설정 또는 해제할 수 있습니다.
BizTalk Adapter for TIBCO Enterprise Message Service는 메시지가 BizTalk Server로 올바르게 발송된 경우 항상 메시지 수신을 승인합니다. 즉, 승인되지 않은 메시지는 EMS에서 어댑터로 다시 보냅니다. 이 구성은 대상에서 설정하므로 어댑터는 EMS에서 메시지를 다시 보내는 횟수를 제어할 수 없습니다. 하지만 메시지를 MessageBox로 보내는지 여부는 어댑터에서 제어할 수 있습니다. EMS 서버는 실패한 메시지를 큐로 다시 보내는 최대 횟수를 제어합니다.
다시 배달되는 메시지의 경우 EMS 서버는 속성을 True로 설정하고 JMSRedelivered
를 증가합니다 JMSXDeliveryCount
. 두 속성 값 모두 오케스트레이션에서 사용할 수 있습니다. 배달 과정을 거치지 않고 EMS의 배달되지 않은 메시지 큐로 메시지를 이동할 수는 없습니다. 그렇게 하면 메시지 속성이 변경됩니다.
메시지가 다시 배달할 수 있는 최대 횟수에 도달하면 EMS 서버는 메시지를 삭제할지 아니면 $sys.undelivered 큐에 넣을지를 결정합니다. EMS 서버는 속성을 기반으로 JMS_TIBCO_PRESERVE_UNDELIVERED
결정을 내립니다. True이면 메시지가 배달되지 않은 큐로 이동하거나 삭제됩니다. 이 속성은 메시지를 보내기 전에 오케스트레이션에서 설정할 수 있습니다. 배달을 한 후에는 메시지 속성을 변경할 수 없습니다. EMS에 메시지를 성공적으로 보내면 BizTalk Server에 승인이 전달됩니다. EMS로 테마를 보낼 때 오류가 발생하면 전송이 일시 중단되고 다시 시도가 가능한 것으로 표시됩니다.