14

DirectComponentのドキュメントには、次の例が示されています。

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("direct:processOrder");

from("direct:processOrder")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");

それと次の違いはありますか?

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");

Java DSL での to() メソッドの動作に関するドキュメントを見つけようとしましたが、RouteDefinition javadocを超えて(「指定されたエンドポイントに交換を送信する」という非常に素っ気ない結果が得られます)、空白になりました。 :(

4

5 に答える 5

18

上記のケースでは、大きな違いはありません。「ダイレクト」コンポーネントは、メソッド呼び出しによく似ています。

もう少し複雑なルートの構築を開始すると、さまざまな理由から、それらをいくつかの異なる部分に分割する必要があります。

たとえば、Camel コンテキストの複数のルート間で再利用できる「サブルート」を作成できます。通常のプログラミングでメソッドをセグメント化して、再利用を可能にし、コードをより明確にするのと同じように。同じことが直接コンポーネントなどを使用するサブルートにも当てはまります。

同じアプローチを拡張できます。複数のプロトコルをルートのエンドポイントとして使用したいとします。次のように、直接エンドポイントを使用してメイン ルートを作成できます。

// Three endpoints to one "main" route.
from("activemq:queue:order.in")
  .to("direct:processOrder");

from("file:some/file/path")
  .to("direct:processOrder");

from("jetty:http://0.0.0.0/order/in")
  .to("direct:processOrder");

from("direct:processOrder")
  .to("bean:orderService?method=process")
  .to("activemq:queue:order.out");

もう 1 つのことは、DSL の「from()」句ごとに 1 つのルートが作成されることです。ルートは Camel のアーティファクトであり、ルートに対して動的に開始、停止、追加、削除などの特定の管理タスクを Camel API で実行できます。「to」句は単なるエンドポイント呼び出しです。

Camel で多少複雑な実際のケースを実行し始めると、「直接」ルートが多すぎることに気付くでしょう。

于 2012-06-08T22:34:29.007 に答える
2

Direct Componentは、ルートの論理セグメントに名前を付けるために使用されます。これは、構造的プログラミングで手続きを命名するのと同様のプロセスです。

あなたの例では、メッセージ フローに違いはありません。構造的プログラミングの観点から言えば、ルートに対して一種のインライン展開を行うと言えます。

于 2012-06-13T13:07:34.613 に答える
1

もう 1 つの違いは、ダイレクト コンポーネントにはスレッド プールがなく、ダイレクト コンシューマー プロセス メソッドはダイレクト プロデューサーの呼び出しスレッドによって呼び出されることです。

于 2014-03-04T07:09:05.043 に答える
0
 from(A).to(B).to(OUT) 

連鎖している

A --- B --- OUT

だが

from(A ).to( X)
from(B ).to( X)
       from( X).to( OUT )

ここで、Xは直接です:?

基本的には参加のようなものです

A
  \____ OUT
  /
B

明らかに、これらは異なる動作であり、2つ目では、シリアルチェーンだけでなく、必要なロジックを実装できます。

于 2013-03-08T14:15:04.683 に答える
0

主に、再利用のためのメソッドを持っていたJavaのように、複雑なルート構成を壊すために使用されます。また、直接ルートでスレッドを構成することにより、スレッドを呼び出す作業を減らすことができます。

于 2015-07-20T03:35:06.843 に答える