第5章 コンテンツベースのルーターの追加


このチュートリアルでは、Content-Based Router (CBR) を追加してルートにログを記録する方法を示します。

CBR は、そのコンテンツに基づいてメッセージを宛先にルーティングします。このチュートリアルでは、作成する CBR は、各メッセージの数量フィールドの値 (注文された動物の数) に基づいて、メッセージをさまざまなフォルダー (有効または無効) にルーティングします。各注文の動物の最大値は 10 です。CBR は、数量が 10 より大きいかどうかに応じて、メッセージをさまざまなフォルダーにルーティングします。例えば、ある動物園が 5 頭のシマウマを注文し、3 頭のシマウマしか入手できなかった場合、注文は無効な注文先フォルダーにコピーされます。

ゴール

このチュートリアルでは、次のタスクを完了します。

  • ルートにコンテンツベースのルーターを追加します
  • コンテンツベースのルーターを設定します。

    • コンテンツベースルーターの各出力ブランチにログエンドポイントを追加します
    • 各ログエンドポイントの後に Set Header EIP を追加します
    • それ以外の場合は、コンテンツベースのルーターにブランチを追加します

前提条件

このチュートリアルを開始するには、次のいずれかの結果である ZooOrderApp プロジェクトが必要です。

コンテンツベースルーターの追加と設定

ルートにコンテンツベースのルーターを追加して設定するには、次の手順に従います。

  1. Project ExplorerZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml をダブルクリックして Editor ビューで開きます。
  2. Design キャンバスで To_Received ノードを選択し、ごみ箱アイコンを選択して削除します。
  3. PaletteRouting ドロワーを開き、Choice ( Choice icon ) パターンをクリックし、(Design キャンバスで) From_from1 ノードをクリックします。

    tutCBRaddChoice1

    Route_route1 コンテナーが拡張し、Choice_choice1 ノードが追加されます。エラーアイコンは、Choice_choice1 ノードに子ノードが必要なことを示しています。子ノードは、次のステップで追加します。

  4. Routing ドロワーから、When ( When icon ) パターンをクリックし、キャンバスで Choice_choice1 ノードをクリックします。

    Choice_choice1 コンテナーが拡張し、When_when1 ノードが追加されます。

    tutCBRaddWhen1

    When_when1 ノードに付随する warning icon は、1 つまたは複数の必要なプロパティー値を設定する必要があることを示しています。

    注記

    このツールは、ルートコンテナーの無効なドロップポイントにパターンを追加することを防ぎます。

  5. キャンバスで When_when1 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutCBRWhen1OpenProps
  6. Expression フィールドの drop-down menu icon ボタンをクリックすると、利用可能なオプションのリストが表示されます。
  7. テストメッセージは XML で記述されているため、xpath (XML クエリー言語の場合) を選択します。

    注記

    Expression を選択すると、Properties ビューに、Expression フィールドのすぐ下のインデントされたリストにそのプロパティーが表示されます。このインデントされたリストの Id プロパティーは、式の ID を設定します。Description フィールドに続く Id プロパティーによって When ノードの ID が設定されます。

  8. インデントされた Expression フィールドに、/order/orderline/quantity/text() > 10 と入力します。

    この式は、quantity フィールドの値が 10 より大きいメッセージのみが、ルート内のこのパスを (invalidOrders フォルダーに) 移動することを指定します。

  9. 残りの各プロパティーはそのままにしておきます。

    注記

    Trim オプション (デフォルトで有効) は、メッセージから先頭または末尾の空白と改行を削除します。

    tutCBRWhen1Props
  10. ルーティングコンテキストファイルを Save します。
  11. Source タブをクリックして、ルートの XML を表示します。

    tutCBRaddedSourceV

ロギングの追加と設定

ZooOrder アプリケーションの例では、ログメッセージを追加して、ルートを通過するときに XML メッセージを追跡できるようにします。ルートを実行すると、ログメッセージが Console ビューに表示されます。

次の手順に従って、CBR ルートにロギングを追加します。

  1. Design タブの Palette で、Components ドロワーを開き、Log コンポーネントをクリックします ( Log icon )。
  2. キャンバスで When_when1 ノードをクリックします。

    When_when1 コンテナーが拡張し、Log_log1 ノードが追加されます。

    tutCBRlog1Added
  3. キャンバスで Log_log1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Message フィールドで、The quantity requested exceeds the maximum allowed - contact customer.と入力します。

    tutCBRlog1Properties

残りのプロパティーはそのままにしておきます。

+

注記

ツールは、ログノード id 値を自動生成します。Fuse Integration パースペクティブの Messages ビューで、ルートでトレースが有効になっている場合、ツールはメッセージインスタンスの Trace NodeId 列にログノードの Id フィールドのコンテンツを挿入します (8章ルートを介したメッセージのトレース チュートリアルを参照してください)。Console では、ルートが実行されるたびに、ログノードの Message フィールドのコンテンツがログデータに追加されます。

  1. ルーティングコンテキストファイルを Save します。

メッセージヘッダーの追加と設定

メッセージヘッダーには、メッセージを処理するための情報が含まれています。

メッセージヘッダーを追加および設定するには:

  1. Palette で、Transformation ドロワーを開き、Set Header パターンをクリックします。
  2. キャンバスで Log_log1 ノードをクリックします。

    When_when1 コンテナーが拡張し、SetHeader_setHeader1 ノードが追加されます。

    tutSetHead1Added
  3. キャンバスで SetHeader_setHeader1 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutSetHeadPropEdNew
  4. drop-down menu icon Expression フィールドのボタンをクリックして使用可能な言語のリストを開き、constant を選択します。
  5. インデントされた Expression フィールドに Invalid と入力します。
  6. Header Name フィールドに Destination と入力します。
  7. 残りのプロパティーはそのままにしておきます。

    tutSetHead1Properties2
  8. Palette で、Components ドロワーを開き、File ( File icon ) コンポーネントをクリックします。
  9. キャンバスで SetHeader_setHeader1 ノードをクリックします。

    When_when1 コンテナーが拡張し、To_to1 ノードが追加されます。

    tutCBRWhen1TargetFile
  10. キャンバスで To_to1 ノードを選択し、Properties ビューでそのプロパティーを開きます。

    tutCBRNewTargetFileProps1
  11. Details タブで、directoryNameUri フィールドの target/messages/invalidOrders に置き換え、Id フィールドに _Invalid と入力します。

    tutCBRNewTargetFileProps2
  12. ルーティングコンテキストファイルを Save します。
  13. Source タブをクリックして、ルートの XML を表示します。

    tutCBRLogHeaderSourceV

有効な注文を処理するためのブランチの追加と設定

これまでのところ、CBR は無効な注文 (数量の値が 10 より大きい注文) を含むメッセージを処理します。

有効な注文 (つまり、When_when1 ノードに設定された XPath 式と一致しない XML メッセージ) を処理するようにルートのブランチを追加および設定するには、次のようにします。

  1. Palette で、Routing ドロワーを開き、Otherwise ( Otherwise icon ) パターンをクリックします。
  2. キャンバスで Choice_choice1 コンテナーをクリックします。

    tutCBRaddOtherwise

    Choice_choice1 コンテナーが拡張し、Otherwise_otherwise1 ノードが追加されます。

  3. キャンバスで Otherwise_otherwise1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Id フィールドで、_otherwise1_elseValid に変更します。

    tutCBROtherwiseProps

それ以外のブランチのロギングを設定するには、次のようにします。

  1. Palette で、Components ドロワーを開き、Log ( Log icon ) コンポーネントをクリックします。
  2. キャンバスで Otherwise_elseValid ノードをクリックします。

    Otherwise-elseValid コンテナーが拡張し、Log_log2 ノードが追加されます。

    tutCBROtherwiseLogAdd
  3. キャンバスで Log_log2 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Message フィールドに、This is a valid order - OK to process. と入力します。

    tutCBROtherwiseLog2

    残りのプロパティーはそのままにしておきます。

  5. ルートを Save します。

それ以外のブランチのメッセージヘッダーを設定するには、次の手順に従います。

  1. Palette で、Transformation ドロワーを開き、Set Header パターンをクリックします。
  2. キャンバスで Log_log2 ノードをクリックします。

    Otherwise_elseValid コンテナーが拡張し、SetHeader_setHeader2 ノードが追加されます。

    tutCBRSetHead2Add
    注記

    ダイアグラムが混雑したときに、コンテナーを閉じてスペースを解放できます。これを行うには、閉じるコンテナーを選択し、そのコンテナーの collapse icon ボタンをクリックします。

    tutCBRcollapseWhen1Container

    コンテナーを再度開くにはコンテナーを選択して、 expand icon ボタンをクリックします。

    tutCBRexpandWhen1Container

    Design タブでコンテナーを閉じたり開いたりしても、ルーティングコンテキストファイルには影響しません。変更はありません。

  3. キャンバスで SetHeader_setHeader2 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. Expression フィールドの drop-down menu icon ボタンをクリックして、使用可能な言語のリストを開き、constant を選択します。
  5. インデントされた Expression フィールドに ReadyForDispatcher と入力します。
  6. Header Name フィールドに Destination と入力します。
  7. 残りのプロパティーはそのままにしておきます。

    tutCBROtherwiseSetHeadProps2

有効なメッセージのターゲットフォルダーを指定するには、次の手順に従います。

  1. Palette で、Components ドロワーを開き、File ( File icon ) コンポーネントを選択します 。
  2. キャンバスで SetHeader_setHeader2 ノードをクリックします。

    Otherwise_elseValid コンテナーが拡張し、To_to1 ノードが追加されます。

    tutCBROtherwiseFileAdd
  3. キャンバスで To_to1 ノードを選択し、Properties ビューでそのプロパティーを開きます。
  4. URI フィールドの directoryNametarget/messages/validOrders に置き換え、Id フィールドに _Valid と入力します。

    tutCBROtherwiseTargFile2
  5. ルーティングコンテキストファイルを Save します。

    完成したコンテンツベースのルーターは次のようになります。

    tutCBRfinalDesignV
  6. キャンバスの左下にある Source タブをクリックして、ルートの XML を表示します。

    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
        https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
        http://camel.apache.org/schema/blueprint
        http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
    
    <camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint">
            <route id="_route1">
                <from id="_from1" uri="file:src/data?noop=true"/>
                <choice id="_choice1">
                    <when id="_when1">
                        <xpath>/order/orderline/quantity/text() &gt; 10</xpath>
                        <log id="_log1" message="The quantity requested exceeds the maximum allowed - contact customer."/>
                        <setHeader headerName="Destination" id="_setHeader1">
                            <constant>Invalid</constant>
                        </setHeader>
                        <to id="_Invalid" uri="file:target/messages/invalidOrders"/>
                    </when>
                    <otherwise id="_elseValid">
                        <log id="_log2" message="This is a valid order - OK to process."/>
                        <setHeader headerName="Destination" id="_setHeader2">
                            <constant>ReadyForDispatcher</constant>
                        </setHeader>
                        <to id="_Valid" uri="file:target/messages/validOrders"/>
                    </otherwise>
                </choice>
            </route>
        </camelContext>
    </blueprint>

CBR の検証

「ルートを実行する」チュートリアルで説明したように新しいルートを実行し、Console ビューでログメッセージを確認することができます。

実行後、ルートが正しく実行されたかどうかを確認するには、Project Explorer でターゲットの宛先フォルダーを確認します。

  1. ZooOrderApp を選択します。
  2. それを右クリックしてコンテキストメニューを開き、Refresh を選択します。
  3. プロジェクトの root ノード (ZooOrderApp) で target/messages/ フォルダーを見つけ、展開します。

    メッセージの宛先
  4. target/messages/invalidOrders フォルダーに message1.xml および message3.xml が含まれることを確認します。

    これらのメッセージでは、quantity 要素の値は 10 を超えます。

  5. target/messages/validOrders フォルダーに有効な注文が含まれる 4 つのメッセージファイルが含まれていることを確認します。

    • message2.xml
    • message4.xml
    • message5.xml
    • message6.xml

      これらのメッセージでは、quantity 要素の値は 10 以下です。

      注記

      メッセージの内容を表示するには、各メッセージをダブルクリックして、ルートエディターの XML エディターで開きます。

次のステップ

次のチュートリアル 6章ルーティングコンテキストに別のルートを追加する では、有効な注文メッセージをさらに処理する 2 番目のルートを追加します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.