2017-09-07 7 views
0

私はsedaとdirectを使って作業していました。まだセダとダイレクトの使い方を視覚化することはできません。 VMは私には新しいものです。例を挙げて説明してください。seda、vmとdirectの違いは何ですか?例を挙げて説明してください

+1

これはApacheのラクダのフレームワークに固有の関連質問があります。私は答えを書いてくれるでしょう - 私が見ることができる限り、ここでダウン投票は必要ありません。 – vikingsteve

+0

なぜこれを閉じるに投票しますか? OPが求めていることを完全に明確にしています。 google "apache camel components"とすぐに表示されます – vikingsteve

答えて

6

1つのCamelルートが別の場所に直接データを渡すことができるメカニズムが少なくとも4つあります。 「直接」とは、ネットワークや何らかの形の中間ストレージ(ファイル、データベース)を使用せずに意味します。これらのメカニズムは、CamelContextインスタンス間でデータを渡すことができるかどうか、およびそれらが同期または非同期であるかどうかによってグループ化できます。

  • ダイレクト - 単一CamelContext、同期(ブロックプロデューサー)
  • SEDA - 単一CamelContext、非同期(プロデューサをブロックしない)
  • VM - 複数CamelContext、非同期(プロデューサをブロックしない)
  • 直接VM - 複数CamelContext、同期(ブロックプロデューサー)

は、直接と直接VM機構は、かかる最後までエンドポイントブロックを製造するという意味で、同期していますポイント、および残りのルーティングロジックがすべて完了したことを示します。 SEDAとVMの両方のメカニズムでは、コンシューマ上でスレッドのプールが使用され、プロデューサによって行われた各要求はプール内のスレッドの1つに割り当てられます。これにより、コンシューマのエンドポイントおよび関連するルーティングロジックは、プロデューサとは独立して動作することができます。

異なるCamelコンテキスト間で通信が行われる状況では、両方のVMエンドポイントが必要です。多くの場合、ルートを同じCamelContextに結合することは可能です。しかし、モジュール化の理由から不可能である場合もありますし、不可能な場合もあります。たとえば、ライブラリを他のコードで使用する意図で、キャラルルーティングロジックをライブラリ(またはコンポーネント)に実装することができます。完全にするために、このライブラリはおそらく、さまざまなルートを持つ自己完結型のCamelContextを定義します。ライブラリーのCamelロジックを呼び出す場合は、DirectおよびSEDAエンドポイントにCamelコンテキスト間のルーティングに必要なロジックが含まれていないため、VMまたはDirect-VMを使用する必要があります。

+0

多くのお手伝いをしました....私はどのシナリオでそれらがリアルタイムで使用され、どのメカニズムが最も一般的に使用されているか知りたいです。 –

+0

私はダイレクトを使用します:ほとんどの場合、ルーティング要素を整理するだけです。私の経験では、経路外の世界へのインタフェースを持つほとんどのCamel経路は、HTTP、データベース、FTP、ファイルなどの外部システムからデータを取り出し、他の外部システムにデータを生成します。直接:このような構成でエンドポイントを使用すると、ルーティングを簡単に読み取ることができます。このような状況では、セクション間のルーティングを非同期にするにはSEDAが必要になりますが、それは私の仕事では一般的ではありません。 –

2

direct:seda:コンポーネントの違いは、最初のコンポーネントが同期し、2番目のコンポーネントが非同期でキューがあることです。

実際の違いは、同期メッセージを送信するためには、経路が完了するのを待つ必要がありますが、非同期メッセージの場合は、そのメッセージをキューに入れ、消費者が処理すると仮定します。複数のコンシューマ(並列化)を使用することもできます。

最後の例では、vm:も非同期ですが、同じJVM内の異なるラクテルコンテキストでルートを呼び出すこともできます。アプリケーション1にはラクダのコンテキストがあり、アプリケーション2にはラクダのコンテキストがあり、このようにして互いに通信できるとします。

編集:関係で

は「何を使用する」に:あなたは並列化やキューを必要とするときに使用seda:

  • ラクダのコンテキストでエンドポイント間で正常に呼び出すための

    • 使用direct:が、使用しないでください​​
    • 使用vm:アプリケーション間で呼び出します。

    はもちろん、他の多くのユースケースがありますが、それらは(私自身の経験に主観的な)一般的なもの

  • +0

    今、私はVMと感謝について明確なアイデアを得ました –

    +0

    あなたは大歓迎です。 plsも私の編集を参照してください – vikingsteve

    +0

    vmはいくつかのマシン間で配布されたアプリケーションで動作できますか? – gstackoverflow

    関連する問題