Apachecamel:Javaコードとは独立してルーティング情報を保持する
-
27-09-2019 - |
質問
まず、キャメルの開発に現在関わっている人々に感謝します。彼らが入れたすべての努力に感謝しています。
私はいくつかのデザインのアドバイスを探しています。
アーキテクチャは次のようなものです。私は、インスタンス化されたときに互いに接続し、Apacheキャメルを使用してメッセージを送信する必要があるJavaクラスをたくさん持っています。設計上の制約では、すべてのルーティング情報、生産者、消費者、エンドポイントなどがCamel-Context.xmlの一部であるようにフレームワークを作成する必要があります。
個人は、そのようなファイルを変更する機能を持ち、Javaコードを利用できるようにすることなく既存のルートを完全に変更する必要があります。
たとえば、1つのセットアップでは、Bean A - > Bean B-> Bean C-> file->電子メール。別のものでBean B-> Bean A-> Bean C-> ftp-> file-> email私たちはさまざまなアプローチを試みましたが、発信する豆がJava DSLとして実装されていない場合、 Camelが最初の例で常にBean Aを呼び出し、2番目のBean BがBean Aを呼び出すため、メッセージレートは非常に高いです(彼らはソースです)。
Bean AとBean Bはメッセージを発信し、イベント駆動型です。必要なイベントが発生した場合、豆は通知メッセージを送信します。
私の変換は非常にシンプルで、Java DSLの力はまったく必要ありません。要約すると、次の質問があります。
1)上記の制約を考慮すると、宛先アドレスを含むすべてのルーティング情報を確認しますが、すべてがCamelコンテキストファイルの一部であることを確認しますか?
2)ルーティング情報をJavaコードから完全に独立していることを検討できる例はありますか?
3)キャメルが生まれた豆を常に呼び起こさないようにするにはどうすればよいですか?
4)キャメルは、メッセージングキュー全体の豆の位置に関係なく、送信する豆またはメッセージを送信する豆のみを絶えず呼び出しますか?
私はこれをセットアップするためのさまざまな方法を試すオプションを使い果たしました。どんな助けも感謝します。
解決
キャメルウィキページのミドルウェアを隠すことについて読んでください。これにより、クライアントにインターフェイスを使用してメッセージを送信/受信させることができますが、キャメルを完全に知らないことができます(キャメルAPIはまったく使用されません)。
さらに、アクションブックでラクダを購入することを検討し、これについて説明している第14章を読んでください。http://www.manning.com/ibsen/
マニングブックで41%を節約:アクション中のキャメルまたはアクティベートインアクティブ。コードS2941を使用します。 10月6日に期限切れになります。 http://www.manning.com/ibsen/
他のヒント
FuseesbのServiceMixの使用を検討する場合は、2つの部分でルートを分離することをお勧めします。
最初の部分は、ルートをトリガーするイベントドライバービーンです。 servicenmrにメッセージをプッシュする可能性があります(参照してください http://camel.apache.org/nmr.html).
他の部分は、Spring DSLを使用して、フレームワークユーザーに任されます。 NMRでメッセージを聞くだけで(他のルートでプッシュ)、必要なことは何でもします。
もちろん、エンドポイントの定義は、servicemix構成サービスを使用してプロパティ化できます(参照 http://camel.apache.org/properties.html#properties-usingblueprintplopertyplacewholderwithcamelroutes)