Message Routing サンプルは、メッセージ・フローがメッセージを WebSphere MQ キューに経路指定するにあたって使用可能な情報を、データベース表またはファイルを使ってどのように保管できるかを示します。これは、メッセージ・フローの Compute ノードにルーティング情報をハードコーディングすることに代わる手法です。
WebSphere Message Broker であらゆる形式のルーティング・データまたは変換データを保管する方式として、データベース表またはファイルが使用されます。 この方式には、以下のような利点があります。
データベースまたはファイルを使用してこの情報を保管することに伴う 1 つの問題は、メッセージがメッセージ・フローを通るたびにデータベースまたはファイルにアクセスすることによって発生するパフォーマンス上のコストです。
この問題を解決するために共用変数を使用できます。共用変数により、状態をメッセージ・フローに保管でき、それはこのフローを使用するすべてのメッセージで使用可能になります。 共用変数の使用方法の詳細は、WebSphere Message Broker 資料でDECLARE ステートメントを参照してください。 共有変数を使用すれば、データベース表またはファイルからの情報をメッセージ・フローのメモリー内に保管できます。 これによりデータベース表またはファイルにアクセスし続ける必要はなくなり、パフォーマンス上のコストをかけることなく、データベース表またはファイルを使用するメリットのほとんどすべてが得られます。 ただし、データベース表またはファイルが変更されるときに、キャッシュはそれらの変更を適用しません。変更を適用するためには、メッセージ・フローを再始動するか、メッセージ・フローにリフレッシュ・メカニズムを追加する必要があります。
Message Routing サンプルは、メッセージ・フローの中でメッセージを経路指定するためにデータベース表またはファイルを使用する方法や、メッセージ・フローが共用変数を使用してデータベース表またはファイルを保管する方法を示しています。また、メッセージ・フローを再始動したり、あるいはリフレッシュ・メッセージをメッセージ・フローに送信したりすることによって、キャッシュに入れられたデータベース表をリフレッシュする方法も示しています。
この単純なメッセージ・フローは、WebSphere MQ キューからメッセージを読み取り、データベース表のデータに基づいて宛先リストを作成し、それから宛先リストのエントリーにメッセージを経路指定します。
共用変数に保管された、キャッシュに入れられたバージョンのデータベース表を使ってメッセージを経路指定する方法を示すサンプル。 メッセージ・フローには 2 つの主なサブフローがあります。最初のサブフローは、Routing_using_database_table メッセージ・フローと同じ機能を提供しますが、共用変数を使用してこれを行います。 2 番目のサブフローは、共用メモリー変数をリフレッシュするために使用されます。
3 つのシナリオにより、FileRead ノードを使用してメッセージを経路指定する方法を示します。 第 1 のものは XML 形式のファイルを使用し、第 2 と第 3 のものはコンマ区切り値 (CSV) 形式のファイルを使用します。 ここに示されている形式は例です。 ファイル全体を読み取る場合でも、ファイル中の単一のレコードを選択する場合でも、任意のファイル形式が使用可能です。
このメッセージ・フローは、WebSphere MQ キューからメッセージを読み取ります。 次にファイル全体を読み、ファイルの内容に基づいて宛先リストを作成します。 このシナリオの場合、ファイルは XML 形式です。 メッセージは、宛先リスト内の項目に経路指定されます。
このサンプルの FileRead ノードは、XPath 式を使用して、着信メッセージのキーに基づきファイル内の適切なレコードを見つけます。このシナリオで使用されるファイルには、CSV 形式のレコードが含まれます。 ファイル内の各レコードのモデル化のために、メッセージ・セットが使用されます。 レコードからのルーティング情報は、宛先データ・リストに直接コピーされ、MQOutput ノードによって直接使用されます。その結果、(Compute ノードなどによる) 追加の処理は必要ありません。
このフローは、ESQL 共有変数を使用してファイルからの情報をキャッシュする方法を示すことにより、上記のフローを拡張します。追加のサブフローは、共有変数のキャッシュをリフレッシュします。
FileRead ノードの結果タブ上で 3 つの XPath 式を設定できます。
プロパティー | 式 | 説明 |
---|---|---|
結果データのロケーション | $ResultRoot/MRM/data | 選択されるレコード内。レコードのこのフィールドは、メッセージの質を高めるために使用されます。 このフィールドの内容は、出力データのロケーションにコピーされます。 |
出力データのロケーション | $OutputLocalEnvironment/Destination/MQ | |
レコード選択式 | (concat( $InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[1], $InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[2] ) = $ResultRoot/MRM/Initial ) AND ($InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Surname = $ResultRoot/MRM/Surname) |
式の最初の部分は、メッセージ中の 2 つのイニシャルを連結します。 式の 2 番目の部分は、メッセージの姓の部分を取り出します。 イニシャルと姓の一致するレコードが伝搬することになります。 |
Message Routing サンプルの実行に使用するテスト・メッセージは、顧客の送り状明細が入った XML メッセージです。
<SaleEnvelope> <Header> <SaleListCount>1</SaleListCount> </Header> <SaleList> <Invoice> <Initial>T</Initial> <Initial>D</Initial> <Surname>Montana</Surname> <Item><Code>00</Code> <Code>01</Code><Code>02</Code> <Description>Twister</Description> <Category>Games</Category> <Price>00.30</Price> <Quantity>01</Quantity> </Item> <Item> <Code>02</Code><Code>03</Code><Code>01</Code> <Description>The Times Newspaper</Description> <Category>Books and Media</Category> <Price>00.20</Price> <Quantity>01</Quantity> </Item> <Balance>00.50</Balance> <Currency>Sterling</Currency> </Invoice> </SaleList> <Trailer> <CompletionTime>12.00.00</CompletionTime> </Trailer> </SaleEnvelope>
Initial および Surname フィールドは、検索によって各顧客の宛先キューを見つけるために使用されます。
すべてのサンプルのメッセージ・フローは、ルーティング情報の入手場所として同じデータベース表を使用します。 データベース表には 5 つの列があります。最初の 3 つは着信メッセージから派生した検索情報で、最後の 2 つはメッセージの経路指定先のキューとキュー・マネージャーの詳細です。以下の表に、これらの列を示します。
列 | 説明 |
---|---|
Variable1 | 宛先キューの検索の際に使用される最初の変数 (サンプルでは、この変数はハードコーディングされており、XML メッセージから派生したものではありません)。 |
Variable2 | 宛先キューの検索の際に使用される 2 番目の変数 (この変数は、Initial フィールドを使用することにより XML メッセージから派生したものです)。 |
Variable3 | 宛先キューの検索の際に使用される 3 番目の変数 (この変数は、Surname フィールドを使用することにより XML メッセージから派生したものです)。 |
Queue_manager | 宛先キュー・マネージャー名。 |
Queue_name | 宛先キュー名。 |
データベース表の定義は、Database ディレクトリーにある、サンプル・メッセージ・フロー・プロジェクトで提供されています。データベース表は着信 XML メッセージに直接リンクされないため、この表をさまざまなルーティング・メッセージに再使用できます。 データベース表が着信 XML メッセージに直接リンクされる場合は、同じ表を使う異なるノードを区別するために最初の変数を使用できるかもしれません。
各メッセージ・フローの Compute ノードには、必要な動作を実現するために何が実行されたかを正確に示す詳細な ESQL コメントが含まれています。
サンプルのデータベースの内容を表示する方法は、インストールされているデータベース製品によって異なります。 これは、DB2 データベースであれば、DB2 が提供するツール (DB2 コントロール・センターなど) が使用されるためです。
このメッセージ・フローでは、2 つの XML ファイルが使用されます。 どちらも同じ構造ですが、一方にはメッセージの複数の宛先が含まれます。 XML ファイルには 2 つのエレメントがあります。
これらのメッセージ・フローは、CSV ファイルを使用します。ファイルには複数のレコードが含まれ、そのそれぞれについて以下の 4 つのエレメントがあります。
各メッセージ・フローの Compute ノードには詳細な ESQL コメントが付いていて、必要な動作を実現するために何が実行されたかを明確に説明しています。
メッセージ・フロー Routing_using_records_file および Routing_using_file_memory_cache のために使用されるメッセージ・セットは、以下の画像に示されているとおりです。
メッセージ・セットから、CSV ファイルの中に示されているフィールドのそれぞれを見ることができます。 DestinationData エレメントは、メッセージの送信先の宛先キューごとに 1 つずつ反復して指定されます。