第25章 コンテキスト


コンテキストコンポーネント

Camel 2.7 以降で利用可能
context コンポーネントを使用すると、複数のルートを持つ CamelContext から新しい Camel コンポーネントを作成できます。これは、ラックボックスとして扱われるため、他の CamelContext のコンポーネント内のローカルエンドポイントを参照できます。
これは、コンテキストコンポーネントはエンドユーザーにとって非常に簡単ですが、Routes コンポーネントは、CamelContext コンポーネント内のローカルエンドポイントを参照するための設定アプローチよりもシンプルな規則になります。???
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-context</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

Copy to Clipboard Toggle word wrap

URI 形式

context:camelContextId:localEndpointName[?options]

Copy to Clipboard Toggle word wrap
または、context: 接頭辞を省略することもできます。
camelContextId:localEndpointName[?options]

Copy to Clipboard Toggle word wrap
  • camelContextId は、CamelContext をレジストリーに登録するのに使用した ID です。
  • localEndpointName は、ブラックリストボックス CamelContext 内で評価される有効な Camel URI にすることができます。または、ローカルエンドポイントにマップされる論理名を使用することもできます。たとえば、ローカルで direct:invoicesseda:purchaseOrders などのエンドポイントが id supplyChain の CamelContext 内にある場合は、URI supplyChain:invoices または supplyChain:purchaseOrders を使用して物理エンドポイントの種類を省略し、純粋な論理 URI を使用できます。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

この例では、ブラックボックスコンテキストを作成し、別の CamelContext から使用します。

コンテキストコンポーネントの定義

まず CamelContext を作成してそのルートをいくつか追加し、そのルートを起動してから CamelContext をレジストリー(JNDI、Spring、Guice、OSGi など)に登録する必要があります。
これは、この テストケース の通常の Camel 方法で実行できます(createRegistry ()メソッドを参照)。この例では、使用されている Java および JNDI を示しています。
// lets create our black box as a camel context and a set of routes
DefaultCamelContext blackBox = new DefaultCamelContext(registry);
blackBox.setName("blackBox");
blackBox.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        // receive purchase orders, lets process it in some way then send an invoice
        // to our invoice endpoint
        from("direct:purchaseOrder").
          setHeader("received").constant("true").
          to("direct:invoice");
    }
});
blackBox.start();

registry.bind("accounts", blackBox);

Copy to Clipboard Toggle word wrap
上記のルートでは、純粋なローカルエンドポイント(direct および seda)を使用していることに注意してください。また、Accounts ID を使用してこの CamelContext を公開することに 注意 してください。Spring では、
<camelContext id="accounts" xmlns="http://camel.apache.org/schema/spring">
  <route> 
    <from uri="direct:purchaseOrder"/>
    ...
    <to uri="direct:invoice"/>
  </route>
</camelContext>

Copy to Clipboard Toggle word wrap

コンテキストコンポーネントの使用

その後、別の CamelContext では、アカウントに送信するだけで、この "accounts black box" を参照できます。purchaseOrder および consuming from accounts:invoice です。
より詳細で明示的な場合は、context:accounts:purchaseOrder またはさらに context:accounts:direct://purchaseOrder を使用できます。ただし、実装の詳細を非表示にし、単純な論理命名スキームを提供するため、論理エンドポイント URI の使用が推奨されます。
たとえば、一部のミドルウェア(ブラックボックス外)でこのアカウントブラックボックスを公開する場合は、以下を行うことができます。
<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route> 
    <!-- consume from an ActiveMQ into the black box -->
    <from uri="activemq:Accounts.PurchaseOrders"/>
    <to uri="accounts:purchaseOrders"/>
  </route>
  <route> 
    <!-- lets send invoices from the black box to a different ActiveMQ Queue -->
    <from uri="accounts:invoice"/>
    <to uri="activemq:UK.Accounts.Invoices"/>
  </route>
</camelContext>

Copy to Clipboard Toggle word wrap

エンドポイントの命名

コンテキストコンポーネントインスタンスには、その CamelContext 外からアクセスできる多くのパブリック入出力エンドポイントを含めることができます。多くの場合は、上記のようにミドルウェアを非表示にするために論理名を使用することが推奨されます。
ただし、コンポーネントに入力、出力、またはエラー/dead 文字のエンドポイントが 1 つしかない場合は、、、および errで共通の posix シェル名を使用すること が推奨されます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat