Apache Camelは初めてです。誰かがキャメルで「direct:start」の意味を説明できますか。見てください
from("direct:start")
.to("http://myhost/mypath");
ありがとう。
上記の「direct:start」は、ルートが「start」という名前の Direct Component で始まることを単に示しています。
直接エンドポイントは、ルートの同期呼び出しを提供します。 Exchange
をdirect:startエンドポイントに送信する場合は、ProducerTemplate
を作成し、さまざまな送信メソッドを使用します。
ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct:start", "This is a test message");
名前start
について特別なものはありません。単にエンドポイントを参照するときに使用する名前であり、direct:foo
。
Startという名前のメソッドとして直接ルートを想定しているため、特定の操作を実行するにはstartメソッド/ direct routeを呼び出す必要があります。以下の例が役立ちます。
入力ファイルがXXXXロケーションで使用可能になり、lineに到達すると、最初のルートがトリガーされ、実際のフローは2番目のルートに進みます。基本的に、エンドポイントからの直接ルートは、何らかのプロデューサーエンドポイントによってトリガーされます。
<route id="fileRoute">
<from uri="file:XXXX">
..
<to uri="direct:start">
</route>
<route id="directStartRoute">
<from uri="direct:start">
<to uri="http://myhost/mypath">
</route>
Apache Camel directは、基本的に、同じキャメルコンテキストでExchangeをあるルートから別のルートに送信するためのものです。したがって、AMQからメッセージを取得しており、取得したすべてのメッセージのヘッダーを入力して、メール受信者リストに送信するとします。したがって、ここでは、次の説明を持つ新しいルーターを作成する必要があります
from(“direct:populateHeaders”)
.setHeader(“myHeader”, “myHeaderValue”)
.end()
そして、任意のルートから、次のように記述することにより、Exchangeオブジェクトをこのルートに送信できます。
...
.to(“direct:populateHeaders”)
...
これは、キャメルコンテキストでは機能しないことに注意してください。
direct:startは、2つのエンドポイント間で通信するための同期方法を提供します。これは、一般的なファイルまたはxmlメッセージではなく、ラクダメッセージを使用して通信する場合にのみ使用されます。
このように考えてください。ラクダのルートにメッセージを送信するときは常に2つのことがあります。 1.メッセージの配信方法を定義するURIスキーム。そして、どのコンポーネントタイプに配信されます。 2.そのコンポーネントのインスタンスを定義するURIパス。
次に、direct:startの場所に移動します。 'direct'は、このメッセージがDirectコンポーネントに同期的に送信されることを示します。 'start'は、このメッセージを配信するDirect Componentのインスタンスを示します。
異なるURIパスの重要性:次に、異なるルートを使用する必要があるかどうかを検討します。また、2つの異なるスレッドから同期的にメッセージを生成したいと考えています。ルートの開始点として「direct:start」を使用しても機能しません。条件付き処理コンポーネントがある場合を除き、初心者の場合はこれを忘れてください。両方のルートにメッセージを正常に配信するには、「direct:somename1」と「direct:somename2」の2つのエントリを追加する必要があります。 'start'は必須ではありません。好きな名前を付けることができます。
Martin FowlerのEIP本からいくつかの章を読むことをお勧めします。そもそも素晴らしいリソースです。これにより、キャメルを非常に理解しやすくなります。
開始を忘れます。 startは単なる停止ポイントの名前です(直接)。
直接コンポーネントは、同じコンテキストのルート間のブリッジとして使用できます。