第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>
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
context:camelContextId:localEndpointName[?options]
または、context: 接頭辞を省略することもできます。
camelContextId:localEndpointName[?options]
- camelContextId は、CamelContext をレジストリーに登録するのに使用した ID です。
- localEndpointName は、ブラックリストボックス CamelContext 内で評価される有効な Camel URI にすることができます。または、ローカルエンドポイントにマップされる論理名を使用することもできます。たとえば、ローカルで direct:invoices や seda: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);
上記のルートでは、純粋なローカルエンドポイント(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>
コンテキストコンポーネントの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
その後、別の 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>
エンドポイントの命名 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
コンテキストコンポーネントインスタンスには、その CamelContext 外からアクセスできる多くのパブリック入出力エンドポイントを含めることができます。多くの場合は、上記のようにミドルウェアを非表示にするために論理名を使用することが推奨されます。
ただし、コンポーネントに入力、出力、またはエラー/dead 文字のエンドポイントが 1 つしかない場合は、、、および errで共通の posix シェル名を使用すること が推奨されます。