Spring Integration を使用する場合と使用する場合キャメル?
-
27-09-2019 - |
質問
経験豊富な Spring ユーザーとして、私は、いくつかの (JMS) メッセージング機能を必要とする最近のプロジェクトでは Spring Integration が最も合理的であると考えていました (さらに詳しく)。Spring Integration を使って数日作業した後でも、リクエストとレスポンス (異なる JMS キューでリッスンする) 通信を実現するために設定しなければならないチャネルの量を考えると、設定のオーバーヘッドがかなり大きいように感じます。
そのため、Camel が Spring Integration とどのように異なるのかという背景情報を探していましたが、情報がかなり不足しているようで、次のことを見つけました。
- http://java.dzone.com/articles/spring-integration-and-apache (Spring Integration での実際の統合シナリオの実装と、キャメル、2009 年 12 月から)
- http://hillert.blogspot.com/2009/10/apache-camel-alternatives.html (Camel と他のソリューションの比較、2009 年 10 月)
- http://raibledesigns.com/rd/entry/aking_apache_camel_for_a (マット・ライブル、2008年10月)
質問は次のとおりです。あるスタックをもう一方のスタックよりも使用して、どのような経験をしましたか?Spring Integration がサポートされていない場合、どのシナリオで Camel をお勧めしますか?それぞれの長所と短所はどこにありますか?実際のプロジェクトからのアドバイスは大歓迎です。
解決
私たちは、春の統合の上にラクダを選択してください。私たちは、実際には春のプロジェクトでそれを使用して、それを構成する部分に春を使用しています。プログラミングAPIの明確であり、賢明な部品の大規模なセットがあります。
私たちは、小規模な銃撃戦を行なったし、基本的に私たちの要求ラクダウォンのために、その時点で。私たちは、それが主に使用してFTP / SFTP / ...または電子メールに添付し、それを送信し、それを送信する通常のフォーマットの変換を必要とする外部団体からの/への内部データファイルを転送するために使用します。
私たちは、編集、コンパイル、デバッグサイクルが減少しました。ルートを設定する実験をグルービーを使用してボーナスを追加されます。
春の統合はあまりにも偉大な製品であり、そして私はそれがあまりにも私たちのニーズを満足させるだろう、かなり確信しています。
他のヒント
Spring Integration は、すでに Spring プロジェクトを持っていて、ファイル、FTP、JMS、JDBC などを使用して「基本的な」統合を追加する必要がある場合にのみお勧めします。
Apache Camel には 2 つの主な利点があります。
- さらに多くのテクノロジーがサポートされています。
- さらに、(優れた) XML DSL には、Java、Groovy、Scala 用の流暢な API があります。
Apache Camel は Spring との統合が非常に優れているため、ほとんどの Spring プロジェクトで Spring 統合を行う場合は、代わりに Apache Camel を使用することもあります。
さらに詳細が必要な場合は、私のブログ投稿で私の経験を読んでください。 選択のために台無しに:Spring Integration、Mule ESB、または Apache Camel のどれを使用する統合フレームワークですか?
私は最近、統合を目的として Camel 対 Spring Integration シュートアウトを実施しました。 アパッチ カフカ. 。私は熱心な Spring 開発者であるにもかかわらず、悲しいことに Spring の成長を続けるプロジェクト スタックに対する私の疑念が裏付けられたことがわかりました。 Spring は、他のフレームワークの接着剤として機能する IOC コンテナとしては優れていますが、実行可能な代替手段を提供することはできません。 に それらのフレームワーク. 。これには例外もあるかもしれません。つまり、MVC に関係するすべてのこと、Spring の起源と優れた機能ですが、コンテナーの機能に加えて新しい機能を提供する他の試みは不十分です。 3つの理由 そしてその SI Kafka の使用例 それらすべてを確認します:
- XML 構成用の、長くて使いにくい DSL の導入。
- すべてのフレームワーク コンポーネントを接続するための XML 構成コードのページ。
- 専用フレームワークと同等の機能を提供するためのリソースが不足しています。
さて、私の銃撃戦の結果に戻りましょう。最も重要なことは、Camels の全体的なコンセプトに感銘を受けたことです。 エンドポイント間のルート. 。Kafka はこの概念とシームレスに統合されており、すべてを稼働させるには 3 行の構成で十分です。プロセス中に発生した問題は、次のように適切に対処されます。 プロジェクトチームからの豊富なドキュメント Stackoverflow にも多くの質問があります。最後になりましたが、 Springへの包括的な統合 それは満たされない願いを残すことはありません。
逆に、SI の場合、Kafka 統合のドキュメントは次のとおりです。 かなり激しい そして依然として、Kafka を統合する方法を明確に説明できません。Kafka の統合は、 押された SI のやり方に置き換えると、さらに複雑さが増します。その他のドキュメント、例:Stackoverflow のものも、Camel に比べて種類が少なく、役に立ちません。
私の結論:コブラーは自分の取引に固執します。Spring をコンテナとして使用し、Camel をシステム統合フレームワークとして使用します。
私は本当にあなたが何をしたいかに依存します。独自のメッセージングソリューション春の統合を構築するために何かを拡張する必要がある場合は、より良いプログラミングモデルを持っています。カスタムコードなしサポート多くのプロトコルをその何かが必要な場合は、キャメルは先に春の統合のです。
小規模な銃撃戦を有するだけで必ずあなたが通常のプロジェクトでやっているだろうと、物事の種類をやろうとしている作る、非常に良いアイデアです。
- 免責事項:私だ春の統合コミッター
私がこれまでに見た Camel と SI の比較のほとんどでは、次のことが考慮されていません。
1.) Spring Boot が Spring Integration の開発者の生産性に与えた影響
2.) Spring XD の効果は、Spring Integration アプリケーションをコードコンパイルなしで利用できるようにすることに影響を与えています。また、Spring XD を拡張しようとしている場合、Spring XD のソースとシンクは単なる Spring Integration チャネルアダプタです。
3.) Spring XD の効果は、Spring Integration、Spring Batch、Spring Data (+Hadoop!) を 1 つのスタックに統合し、バッチおよびストリーム処理、HDFS/Apache Hadoop サポートなどを Spring Integration に効果的にもたらしました。
4.) まもなくリリースされる Spring Integration 4.0 Java DSL の影響 https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference
ご検討の際には、
/Pieter (免責事項 私は Pivotal で働いています)
私たちはアプリケーションに Spring Integration を使用していますが、Spring Integration フレームワークで多くの問題が発生したため、現在 Apache Camel への移行を検討しています。ここにいくつかの問題があります。
Spring が提供する CachingConnectionFactory は、IBM MQ で何千ものアイドル接続を開きますが、これらの接続が再利用されるという保証はありません。それでも、これらの接続は永久に開いたままになるため、MQ 側で問題が発生します。接続を更新するためだけに、下位環境でアプリケーションを毎週再起動する必要がありました。Apache Camel はキャッシュも提供しており、接続は負荷に基づいて増減するようです。
Spring は QoS パラメータのマッパーを提供しません。QoS を有効にしても、配信モードと有効期限/timetolive プロパティは失われます (これについては JIRA の問題を提起するつもりです)。Apache Camel はこれを処理し、QoS パラメータは上流のアプリケーションに送信され、削除されません。
私は現在、Apache Camel を使用した例外とトランザクションの処理に関する問題に取り組んでいますが、Spring は AOP を使用するとより適切に処理できると思われます。
実は、私は、FTPがその潜伏期間を卒業したと言うでしょう。あなたは新機能が実装され、バグが修正されたものかを確認するSIフォーラム/ JIRA上で簡単な検索を行うことができます。それのうち、いくつかの生産使用量がすでに存在しているように、私は示唆しているように、様々なおしゃべりから、それはそれを第二の外観を与えるために、思わコースを経て、私たちにあなたの懸念を伝えるの
http://forum.springsource.org/forumdisplay.php?42-Integration
https://jira.springsource.org/browse/INTする
乾杯 オレグ
免責事項:私は春の統合だコミッター
Apacheのラクダは非常に良いフレームワークであり、非常にあまりにも完成します。アプリケーションは、スプリングを使用している場合でも、私の個人的なアドバイスは、春の統合を使用することです。
春の統合は、春のソースエコシステムの統合EIPの苦情のフレームワークです。それは生態系との優れた統合を持っている:春ブーツ、バッチ、XD。でもコアは春Frameworkの4から始まる同じ抽象化を使用するメッセージングの抽象化のいくつかは、春の統合の基本的なメッセージングの抽象化が非常に強いことを証明するものとして、フレームワークに移動しました。例えば今、Springフレームワークの春のWeb、ウェブソケットをサポートするためのメッセージングの抽象化を使用します。
Apacheのキャメルを使用するには、春の統合に関して、Springアプリケーションのもう一つの良いところは、Spring統合で、あなただけの1アプリケーション・コンテキストを使用することができるということです。キャメルコンテキストは、Springコンテキストであることを覚えておいてください。あなたが使用の機会に新しい春のバージョンを持っている場合、私はコンフィギュレーションのために春の統合JavaのDSLを使用することをお勧めします。私は私の新しいプロジェクトでそれを使用し、それは、より読みやすく、明確に感じています。私は、この反射があなたの評価のためにあなたを助けることができることを願っています。
春の統合の上にラクダを使用する理由の1つです。春の統合は、ThreadPoolのようなものの上に抽象化を提供していません。
キャメル並行コードでの作業の側面の一部を簡略化し、このための追加の構造が提供されています:
http://camel.apache.org/camel-23-threadpool- configuration.htmlする
あなたはこの種のものを必要としないし、ちょうど接続、ファイル、JMSしたい場合は、FTPエンドポイント等...そしてちょうど春の統合を使用します。
一つはデータ・モデリングを行うことができるアプリケーションのためのミドルウェア、メッセージ値およびメッセージの振り付けの変換としてラクダ働く。
あなたの現在のアプリケーションは春にあり、EIPの春の統合によってサポートされる機能が必要な場合は、春の統合は他の最良のオプションは、より多くのサードパーティのサポート/プロトコル/ファイルを必要としているフォーマットなど