Camel と EIP について数日間勉強してきましたが、よくわからないことがいくつかあります (まだ :))。たとえば、5 つのアプリケーションがあり、複数のテクノロジ (REST WS、JMS、データベースなど) を使用して相互にデータを交換しているとします。- Camel ルートはどこに配置すればよいですか? - 個々のアプリケーションのコードを変更し、特定のルートを宣言する必要がありますか? - 新しい Web アプリケーション (または OSGi バンドル) を作成し、ルートを処理するための中央プロバイダーとして機能させる必要がありますか? つまり、このアプリで定義された Camel エンドポイントを指すように他のアプリのコードを変更しますか? - Camel を使用すると、統合セット内の既存のすべてのアプリケーションのコードを変更することになりますか? つまり、Camel は実際のシナリオでどのように機能するのでしょうか? 物事を傍受する中央のウェブアプリのようなものですか?それを処理してから別の場所に送信しますか?それは私のアプリ内の何か(ビジネスルールと同じ場所にある)であり、それをプール/インターセプト/リッスンして処理しますか? これらはすべてダミーの質問であることはわかっていますが、昨日はそれらのことを考えてよく眠れませんでした. どんな助けでも本当に感謝します:)
2 に答える
これが私たちが使用したアプローチです。
まず、独立して実行されるアプリケーション/サービス間の通信を容易にするためにキャメルを使用していますか? このような場合は、camel ルートを含む新しいアプリケーションを作成できます。基本的に、他のすべてのコンポーネントを接続して相互に通信し、既存のアプリに最小限の変更を加えます。
一方で、すでに相互に通信しているサービスのアーキテクチャ標準としてキャメルを使用したいとお考えですか? この場合、既存の各アプリケーションに移動し、サービス間通信 (および構成やエラー処理など、それに関連するすべて) のコードをキャメル ルートとして書き直します。ビジネス ロジックをそのまま維持し、Web サービス呼び出しや jms などを行うための多くのコードを削除または書き直す可能性があります。
中規模のキャメル ルートは、数百行のボイラープレート コードを簡単に置き換えることができ、はるかに読みやすくなります。さらに、すべての EIP とコンポーネント (quartz、hazelcast など) を無料で入手できます。
参考までに、私は JBoss Fuse を ESB として (Apache Camel を使用して) 使用しており、エンタープライズ レベルの統合で非常にうまく機能しています。
バイキングスティーブからの素晴らしい答え。
Camel を使用してレガシー アプリケーションを統合するため、Camel ルートは外部になります。メッセージ バスとして ActiveMQ を使用し、コンテナーとして tomcat6 を使用しています。今始めるとしたら、JBoss Fuse (Karaf) を使用します。
各エンド システムは、そのシステムのメッセージ バスへのアダプタとして機能する Camel ルート セット (このシステムでは戦争) を取得します。
インテグレーションは Camel ルート セットを取得します。
より多くの統合を追加するにつれて、各アプリケーションをそのデータ上の一連のサービスに進化させ、いつの日かサービス指向のアーキテクチャになるという考えです。
理想的な世界では、エンド システムのルート セットはエンド システムと同じサーバー上で実行され、統合ルート セットは中央で実行されます。実際には、すべてのルート セットを集中的に実行します。これは、エンド システムの SLA とホスティング契約の問題です。
より垂直に統合された環境をお持ちのようですので、正規のソリューションを私たちよりもきれいに実装できるはずです。
ネットワーク全体に Camel インスタンスが分散された場合、Fusesource は Fuse Fabric と呼ばれる管理ツールに取り組んでいました。Redhat がそれを取得して以来、それがどこまで進んだかはわかりません。