Message Routing サンプルについて

Message Routing サンプルは、メッセージ・フローがメッセージを WebSphere MQ キューに経路指定するにあたって 使用可能なルーティング情報を、データベース表を使ってどのように保管できるかを示します。 これは、メッセージ・フローの Compute ノードにルーティング情報をハードコーディングすることに代わるアプローチです。

あらゆる形のルーティング・データまたは変換データの保管にデータベース表を使用することは、WebSphere Message Broker で推奨されている方法です。理由は以下のとおりです。

データベースを使ってこの情報を保管することに伴う 1 つの問題は、メッセージがメッセージ・フローを通る度にデータベースにアクセスすることで発生する、パフォーマンスのオーバーヘッドです。

バージョン 6.0 より前の WebSphere Message Broker では、設計上の決定を下すにあたり、経路指定をハードコーディングする、ESQL で情報をマッピングする、データベース表に情報を保管する、という選択肢がありました。しばしば決定の基盤となったのは、データベース使用のパフォーマンスのコストが受け入れ可能かどうかということでした。メッセージの比率が高い場合は、データベース表での保守がより容易な、ハードコーディングされた情報の作成が決定されることがしばしばでした。

バージョン 6.0 では、共用変数という概念が導入されました。共用変数により、状態をメッセージ・フローに保管でき、それはこのフローを使用するすべてのメッセージで使用可能になります。共用変数の使用方法の詳細は、DECLARE 変数を参照してください。共用変数を使用すれば、データベース表をメッセージ・フローのメモリー内に保管することができます。これにより、データベース表にアクセスし続ける必要はなくなり、パフォーマンスのオーバーヘッドなしに、データベース表を使用することの利点のほぼすべてが得られます。得られない利点は 1 つだけです。つまり、キャッシュは、データベース表への変更が発生するときにそれらの変更を適用しません。それらの変更を適用するためには、メッセージ・フローを再始動するか、またはメッセージ・フローにリフレッシュのメカニズムを追加する必要があります。

Message Routing サンプルは、メッセージ・フローの中でメッセージを経路指定するためにデータベース表を使用する方法や、 メッセージ・フローが共用変数を使用してデータベース表を保管する方法を示しています。 また、メッセージ・フローを再始動したり、あるいはリフレッシュ・メッセージをメッセージ・フローに送信したりすることによって、キャッシュに入れられたデータベース表をリフレッシュする方法も示しています。

Message Routing サンプルには 2 つのメッセージ・フローが含まれています。

Routing_using_database_table メッセージ・フロー

データベース表を使用してメッセージを経路指定する方法のサンプル。 この単純なメッセージ・フローは、WebSphere MQSeries キューからメッセージを読み取り、データベース表のデータに基づいて 宛先リストを作成し、それから宛先リストのエントリーにメッセージを経路指定します。

Routing_using_database_table メッセージ・フロー

Routing_using_memory_cache メッセージ・フロー

共用変数に保管された、キャッシュに入れられたバージョンのデータベース表を使用して、メッセージを経路指定する方法のサンプル。メッセージ・フローには 2 つの主なサブフローがあります。最初のサブフローは、Routing_using_database_table メッセージ・フローと同じ機能を提供しますが、共用変数を使用してこれを行います。2 番目のサブフローは、共用メモリー変数をリフレッシュするために使用されます。

Routing_using_memory_cache メッセージ・フロー

テスト・メッセージ

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> フィールドは、データベース検索を行って、各顧客の宛先キューを見つけるために使用されます。

送り状 XML メッセージを経路指定するために使用されるデータベース表

サンプルのメッセージ・フロー群は、ルーティング情報の入手先として同じデータベース表を使用します。 データベース表には 5 つの列があります。最初の 3 つは着信メッセージから派生した検索情報で、最後の 2 つはメッセージの経路指定先のキューとキュー・マネージャーの詳細です。列は以下のとおりです。

説明
Variable1 宛先キューの検索の際に使用される最初の変数 (サンプルでは、これはハードコーディングされており、XML メッセージから派生したものではありません。)
Variable2 宛先キューの検索の際に使用される 2 番目の変数 (これは <Initial> フィールドを使用することにより、XML メッセージから派生したものです。)
Variable3 宛先キューの検索の際に使用される 3 番目の変数 (これは <Surname> フィールドを使用することにより、XML メッセージから派生したものです。)
Queue_manager 宛先キュー・マネージャー名
Queue_name 宛先キュー名

データベース表の定義は、Database ディレクトリーにある、サンプル・メッセージ・フロー・プロジェクトで提供されています。データベース表は着信 XML メッセージに直接リンクされていないので、この表を多くの異なるルーティング・メッセージ用に再使用できます。この場合、同じ表を使用する異なるノードを区別するために、最初の変数を使用できるかもしれません。

各メッセージ・フローの Compute ノードには詳細な ESQL コメントが付いていて、必要な動作を実現するために何が実行されたかを明確に説明しています。

サンプルのデータベースの内容を表示する方法は、インストールされているデータベース製品によって異なります。 これは、DB2 データベースであれば、DB2 が提供するツール (DB2 Control Center など) が使用されるためです。 ユーザーがデータベース製品をインストールしていない場合、サンプルでは Apache Derby データベースが使用されます。 Derby データベースにあるデータを表示する方法については、『Derby データベースの内容の表示』を 参照してください。

メインページのアイコン   サンプルのホームに戻る