メッセージ
JMS メッセージのようなエンタープライズ メッセージ サービス (EMS) メッセージには、ヘッダー、プロパティ、本文の 3 つの部分が含まれています。 ヘッダーは、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 セクションとは無関係です。Destination セクションには、ユーザーが設定した値が格納されています。この値は他のセクションには該当しないため、このセクションに保持されています。
ReplyTo
オーケストレーションで プロパティを設定して、最終的なコンシューマーに応答の送信先を指示できます。 EMS は、 Destination
メッセージが TIBCOEMS から受信されたときに プロパティを設定します。 この 2 つ目のプロパティは、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 Destination
ReplyTo
から受信したオーケストレーションで使用でき、オーケストレーションで使用するために正しくマップできない宛先を 1 つのプロパティとして記述します。
BizTalk Adapter for TIBCO EMS では、TIBCOEMS プロパティを文字列型にマップし、送信先の文字列表記を使用します。 これは または 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 での各プロパティの用途を次の表に示します。
名前 | Type | 説明 |
---|---|---|
TibcoEMS.MessageID | string | 送信呼び出しが、各メッセージに一意の ID を割り当て、ヘッダーに記録します。 すべてのメッセージ ID の値は、この目的のために予約されている 3 文字のプレフィックス ID で始まります。 読み取り専用です。 値を変更しても、メッセージには影響しません。 |
TibcoEMS.Timestamp | long | 送信呼び出しが、ヘッダーに UTC タイムスタンプを記録します。 これは、サーバーがメッセージを受け付けた時刻を示します。 値は、1970 年 1 月 1 日からのミリ秒で示されます。 読み取り専用です。 値を変更しても、メッセージには影響しません。 |
TibcoEMS.Redelivered | ブール値 | サーバーは、メッセーが以前に配信されたメッセージを複製したものであるかどうかを示すためのヘッダーを設定します。次の値があります。 - false: サーバーは、このメッセージをコンシューマーに配信しようとしていません。 - true: サーバーが以前にこのメッセージをコンシューマーに配信しようとしたが、コンシューマーがタイムリーな受信確認を返さなかった可能性はありますが、保証されていません。 読み取り専用です。 値を変更しても、メッセージには影響しません。 |
TibcoEMS.Destination | string | 送信呼び出しは、メッセージの送信先 (キューまたはトピック) をこのヘッダーに記録します。 形式は送信先から取得され、文字列に変換されます。 形式は前に説明した形式です。 読み取り専用です。 値を変更しても、メッセージには影響しません。 |
TibcoEMS.DeliveryMode | string | 有効な値は、PERSISTENT と NON-PERSISTENT の 2 種類です。 既定値は PERSISTENT モードです。 アダプタは、EMS サーバーからの受信確認を待機してから、BizTalk Server にメッセージの受信確認を送信します。 このヘッダー プロパティとポートの構成アイテムは、この受信確認が 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 | string | メッセージに対する返信の送信先です。 形式は、 EMS.JMSDestination および ポートの構成と同じです。 |
TibcoEMS.Type | string | メッセージの種類 (テキスト、バイト、文字列など) を示すものではありません。 一部の JMS プロバイダは、メッセージ リポジトリに、メッセージの種類の定義を格納します。 クライアント プログラムでは、リポジトリ内の定義を参照するために、このフィールドに値を格納できます。 EMS では、このヘッダーがサポートされていますが、使用されることはありません。 JMS 仕様では、標準のメッセージ定義リポジトリは定義されていません。また、メッセージの種類の定義に関する名前付けポリシーも定義されていません。 プロバイダによっては、アプリケーション メッセージごとにメッセージの種類の定義が必要です。 クライアント プログラムでそのようなプロバイダとの互換性を確保するには、クライアント アプリケーションが使用しない場合でも、このヘッダーを設定します。 クライアントで移植性を確保するには、(リテラルではなく) シンボリック値を使用してこのヘッダーを設定し、プロバイダのリポジトリに適合するように構成します。 |
インテグレータは、BizTalk Server のメッセージ コンテキストに昇格させるための一連のプロパティを定義できます。定義されたプロパティは、JMS メッセージのプロパティ部分に追加されます。 インテグレータは、スキーマの作成中に、慎重にプロパティの種類を定義します。 このプロパティの値がメッセージ セレクタで使用されると、プロパティの種類によっては、特定の操作が有効になります。 たとえば、メッセージ セレクター myMessageProperty > 5 を使用する場合は、 プロパティを整数値として定義する必要があり、アダプターは値を整数値としてメッセージに格納します。 昇格させるプロパティは、プロパティ名の先頭が EMSX である必要があります。 定義済みのプロパティと同じ名前は使用できません。
BizTalk Adapter for TIBCO Enterprise Message Service には、このセクションに含めることができる EMS 固有および JMS 固有のプロパティを宣言するスキーマとアセンブリが用意されています。 これらを拡張して、除外を含めることができます。 メッセージ コンテキストで参照されているすべての EMSX プロパティは、EMS メッセージのメッセージ プロパティ セクションに書き込まれます。 詳細については、『TIBCO EMS Users Guide』を参照してください。
EMS では、JMS 仕様で列挙されたすべてのメッセージ (テキスト、バイト、ストリーム、マップ、およびオブジェクト) がサポートされます。 TIBCO EMS 用の BizTalk ではテキスト メッセージの種類のみをサポートしています。
JMS では、種類がテキストのメッセージに XML 形式の本文が含まれている必要はありません。 アダプターはメッセージの本文を処理しません。受信したBizTalk Serverに提供されます。 そのため、アダプターによって BizTalk に送信されたメッセージは、必ずしも XML データとして解析されるとは限りません。
メッセージを EMS サーバーに保持すると、サブスクライバへの 1 回限りの配信を確実に行うことができますが、この方法はアダプタのパフォーマンスに大きな影響を与えます。 送信されたメッセージは、EMS のローカル ストアに格納され、その後でメッセージの受信確認がアダプタに送信されます。 このプロパティをオーケストレーション内でメッセージ単位で設定することも、すべてのメッセージがポートで処理されるように設定することもできます。
受信側の観点からは、アダプタがトピックにサブスクライブしていない場合、メッセージの受信に失敗する可能性があります。 サブスクリプションのないトピックに送信されたメッセージは、EMS で保持されません。 現在はサブスクライブされていない場合でも、送信されたメッセージを受信するためのメカニズムがアダプタに必要です。ただし、永続的なメッセージの使用と同様に、これも EMS のパフォーマンスに大きく影響し、常に必要というわけではありません。
注意
EMS の観点からの受信メカニズムがありますが、実装されておらず、実際には推奨される方法ではありません。 これはトピックのみに関連する問題で、キューは影響を受けません。 トピックは通常、株式相場などの時間別のデータに使用されます。 株価を受信しなかった場合、通常は後で再送信されます。
このような理由から、ポートの構成で EMS サーバーでのメッセージの永続性を有効または無効にできます。
BizTalk Adapter for TIBCO Enterprise Message Service では、メッセージが BizTalk Server に適切にディスパッチされると、メッセージの受信確認が常に行われます。 したがって、未確認のメッセージは EMS からアダプタに再送信されます。 EMS からのメッセージの再送信回数は、送信先自体の構成であるため、アダプタでは制御できません。ただし、アダプタでは、メッセージがメッセージ ボックスに送信されるかどうかを制御できます。 EMS サーバーでは、失敗したメッセージがキューに送信される回数を制御します。
再配信されたメッセージの場合、EMS サーバーは プロパティを JMSRedelivered
True に設定し、 をインクリメントします JMSXDeliveryCount
。 両方のプロパティの値をオーケストレーションで利用できます。 メッセージを配信せずに、EMS の未配信キューに移動することはできません。 これを行うと、メッセージのプロパティが変わります。
最大再配信回数で設定されている回数に達すると、EMS サーバーにより、メッセージを削除するか、$sys.undelivered キューに書き込むかが決定されます。 EMS サーバーは、 プロパティに基づいて決定を JMS_TIBCO_PRESERVE_UNDELIVERED
行います。True の場合、メッセージは配信不能キューに移動するか、削除されます。 このプロパティは、メッセージの送信前にオーケストレーションで設定できます。 配信後は、メッセージのプロパティを変更できません。 EMS へのメッセージの送信が正常に完了すると、BizTalk Server に受信確認が送信されます。 EMS への送信中にエラーが発生すると、メッセージが中断され、再試行可能に設定されます。