キャメルが何をしているのか正確にはわかりません。
あなたが101の言葉でラクダの紹介を与えることができれば:
- 正確には何ですか?
- Javaで書かれたアプリケーションとどのように相互作用しますか?
- サーバーと一緒に行くものですか?
- 独立したプログラムですか?
キャメルとは何か説明してください。
キャメルが何をしているのか正確にはわかりません。
あなたが101の言葉でラクダの紹介を与えることができれば:
キャメルとは何か説明してください。
これをよりアクセスしやすい方法で説明するための私の見解...
Apache Camel とは何かを理解するには、エンタープライズ統合パターンとは何かを理解する必要があります。
おそらくすでに知っていることから始めましょう: Singleton パターン、 Factory パターンなど。それらは単に問題に対する解決策を整理する方法にすぎませんが、それ自体は解決策ではありません。これらのパターンは、Gang of Four が著書「 Design Patterns」を出版したときに、Gang of Four によって分析され、抽出されました。これにより、コードを最適に構築する方法を考える際の多大な労力を節約できました。
ギャング・オブ・フォーと同じように、Gregor Hohpe と Bobby Woolf はEnterprise Integration Patterns (EIP) という本を著し、その中で彼らは新しいパターンと青写真のセットを提案し、文書化しています。同じプロセスまたは別のマシンで実行されています。
彼らは基本的に、私たちのシステムをメッセージ指向に構築することを提案しています。つまり、コンポーネントはメッセージを入力と出力として使用し、他には何も使用せずに相互に通信します。それらは、システム全体を形成するさまざまなコンポーネントから選択して実装できるパターンの完全なセットを示しています。
では、Apache Camel とは何ですか?
Apache Camel は、EIP のインターフェイス、基本オブジェクト、一般的に必要な実装、デバッグ ツール、構成システム、およびその他の多くのヘルパーを提供します。これにより、EIP に従ってソリューションを実装する場合に、時間を大幅に節約できます。
MVCを取ります。MVC は理論的には非常に単純で、フレームワークの助けを借りずに実装できます。しかし、優れた MVC フレームワークは、すぐに使用できる構造を提供し、大規模な MVC プロジェクトを作成するときに必要な他のすべての「側面」を考え抜いて、さらに一歩進んだ構造を提供してくれます。
これこそまさに、EIP 向けの Apache Camel です。これは、EIP に従うためにソリューションを実装したい人向けの、完全に実稼働可能なフレームワークです。
5 ~ 10 分あれば、Jonathan Anstey によるこのIntegration with Apache Camelを読むことをお勧めします。これは、Camel のいくつかの概念の簡単な紹介と概要を提供するよく書かれた記事であり、コード サンプルを使用したユース ケースを実装しています。その中で、ジョナサンは次のように書いています。
Apache Camel は、統合をより簡単にし、開発者がアクセスしやすくすることに重点を置いた、オープン ソースの Java フレームワークです。これは、以下を提供することによって行われます。
- 広く使用されているすべてのエンタープライズ統合パターン(EIP)の具体的な実装
- 多種多様なトランスポートおよび API への接続
- EIP とトランスポートを一緒に配線するための使いやすいドメイン固有言語 (DSL)
Camel in Actionの無料の章(Camel in Action, 2nd ed. is here ) もあり、最初の章で Camel を紹介しています。ジョナサンはその本の共著者です。
プロジェクトの説明の作成は複雑であってはなりません。
私は言う:
Apache Camelは、ルーティングを備えたメッセージングテクノロジーの接着剤です。メッセージングの開始点と終了点を結合して、さまざまな送信元からさまざまな宛先へのメッセージの転送を可能にします。例:JMS-> JSON、HTTP->JMSまたはファネルFTP->JMS、HTTP-> JMS、JSON-> JMS
ウィキペディアによると:
Apache Camelは、ルールベースのルーティングおよびメディエーションエンジンであり、API(または宣言型Javaドメイン固有言語)を使用してエンタープライズ統合パターンのJavaオブジェクトベースの実装を提供し、ルーティングおよびメディエーションルールを構成します。ドメイン固有言語は、Apache Camelが、大量のXML構成ファイルなしで通常のJavaコードを使用して、IDEでルーティングルールのタイプセーフなスマート補完をサポートできることを意味します。ただし、Spring内のXML構成もサポートされています。
見る?難しくなかったですか?
Camel は A から B にメッセージを送信します。
なぜこれのための全体のフレームワーク? さて、あなたが持っているとしたらどうですか:
ftp
、http
、jms
など)したがって、次のものが必要です。
Camel は、すぐに使える上記 (およびそれ以上) を提供します。
クールな DSL 言語を使用して、何をどのように定義するかを定義します。
new DefaultCamelContext().addRoutes(new RouteBuilder() {
public void configure() {
from("jms:incomingMessages")
.choice() // start router rules
.when(header("CamelFileName")
.endsWith(".xml"))
.to("jms:xmlMessages")
.when(header("CamelFileName")
.endsWith(".csv"))
.to("ftp:csvMessages");
}
要するに:
システムを接続/統合する必要がある場合、おそらく何らかのデータ ソースに接続し、このデータをビジネス要件に合わせて処理する必要があります。
それを行うには:
1)それを行うカスタムプログラムを開発できます(時間がかかり、理解しにくい場合があり、他の開発者のために維持する必要があります)
2) または、Apache Camel を使用して標準化された方法で実行することもできます (ほとんどのコネクタが既に開発されています。セットアップしてロジックをプラグインするだけです - プロセスと呼ばれます):
Camel は次のことを支援します。
Apache Camel を使用することで、システムの理解/維持/別の開発者への拡張が容易になります。
Apache Camel は、エンタープライズ統合パターンを使用して開発されています。パターンは、システムを適切に統合するのに役立ちます:-)
類推に基づく
Camel ベースのルーティングは、航空会社の所有者 (例: American Airlines、Jet Airways) の立場に立つことで、非常に簡単に理解できます。
「あなたの航空会社」の目的は、世界のある「都市」から別の都市に「乗客」を「運ぶ」ことです。乗客を運ぶために、ボーイング、エアバス、HAL などのさまざまな「航空機会社」の航空機を使用します。
あなたの航空会社は、出発都市の「空港」を使用して乗客に搭乗し、到着都市の空港を使用して乗客を降機します。乗客は複数の都市に「旅行」することができますが、航空会社の航空機と都市の間を移動するために空港を通過する必要があります。
都市から「出発」する乗客は、本質的に航空会社の航空機に「到着」することに注意してください。そして、都市に「到着」する乗客は、本質的に航空機から出発します。私たちは航空会社の所有者であるため、「到着乗客」と「出発乗客」という用語は、都市の視点に基づく従来の概念とは逆になっています。
各都市の同じ「空港」インフラストラクチャは、「出発」乗客と「到着」乗客によって使用されます。空港は、到着する乗客に提供される「到着インフラ」とは異なる、出発する乗客に「出発インフラ」を提供します。
乗客は、旅行中、航空会社が機内で提供するさまざまな「アメニティ」により、日々の活動を続けることができます。
それに加えて、航空会社は、「現地語の理解」や「旅行」の準備などの特別な待遇のためのラウンジ施設も提供しています。
上記で使用されているいくつかの単語/フレーズを次のように置き換えてみましょう。
あなたの航空会社: アパッチ キャメル
航空機会社: 輸送メカニズム
航空会社の航空機: Apache Camel の基本的なトランスポート メカニズム
運ぶ: ルート
乗客: メッセージ;
都市: システム;
空港: キャメル コンポーネント;
現地語の理解: 型変換;
出発:プロデュース、プロデュース
到着:消費、消費
旅行: ルーティング
アメニティ:あり
単語を置き換えると、次のようになります。
「Apache Camel」の目的は、世界中の「システム」から別のシステムに「メッセージ」をルーティングすることです。Apache camel は、メッセージ ルーティングにさまざまなトランスポート メカニズムを使用します。
Apache Camel は、'from' システムの 'Camel based Component' を使用してメッセージを取得し、'to' システムの 'Camel based Component' を使用してメッセージをドロップします。メッセージは複数のシステムにルーティングされる場合がありますが、「Apache Camel の基礎となるトランスポート メカニズム」とシステムの間を移動するために「Camel ベースのコンポーネント」を通過する必要があります。
システムから「生成」されたメッセージは、基本的に Apache Camel の基礎となるトランスポート メカニズムに「消費」されることに注意してください。また、システムによって消費されるメッセージは、基本的に「Apache Camel の基礎となるトランスポート メカニズム」によって生成されます。
Camel を理解しようとしているので、ここから先は Camel の視点から考える必要があります。したがって、「消費者メッセージ」と「生産者メッセージ」という用語の意味は、システムの観点に基づく従来の概念とは逆になっています。
同じ「Camel ベースのコンポーネント」のコーディング インフラストラクチャが、「プロデューサー メッセージ」と「コンシューマー メッセージ」で使用されます。「Camel ベースのコンポーネント」は、「プロデューサー メッセージ」用の「プロデューサー エンドポイント」と「コンシューマー メッセージ」用の「コンシューマー エンドポイント」を提供します。
メッセージはルーティング時に Camel で処理できます。
このルーティングに加えて、Camel は「型変換」などの特別な機能を提供します...
Apache Camel を理解しようとする前に理解しておく必要があることの 1 つは、エンタープライズ統合パターンです。現場の誰もが実際にそれらを認識しているわけではありません。確かに Enterprise Integration Patterns の本を読むことはできますが、それらについて理解するためのより迅速な方法は、Enterprise Application Integrationに関する Wikipedia の記事のようなものを読むことです。
サブジェクト領域を読んで理解すると、Apache Camel の目的を理解する可能性が高くなります。
HTH
エンタープライズ統合パターンを認識している場合、Apache Camel はすべての EIP を実装する 1 つの統合フレームワークです。
また、Camel をスタンドアロン アプリケーションとして Web コンテナーにデプロイできます。
基本的に、複数のアプリケーションを異なるプロトコルとテクノロジで統合する必要がある場合は、Camel を使用できます。
別の観点からの定義:
Apache Camel は統合フレームワークです。これは、Java プラットフォームで統合の問題を実装するのに役立ついくつかの Java ライブラリで構成されています。これが何を意味し、一方で API と、他方で Enterprise Service Bus (ESB) とどのように異なるかについては、私の記事「Apache Camel を使用する場合」で説明しています。
正確には何ですか?
Apache Camelは、多くのエンタープライズ統合パターンを実装する軽量の統合フレームワークです。必要なパターンを使用して、さまざまなアプリケーションを簡単に統合できます。
Java、Spring XML、Scala、または Groovy を使用できます。HTTP、FTP、JMS、EJB、JPA、RMI、JMS、JMX、LDAP、Netty など、想像できるほぼすべてのテクノロジーが利用可能です。
Java で書かれたアプリケーションとどのようにやり取りするのでしょうか?
Camel は、Java ドメイン固有言語または DSLを使用して、以下に示すさまざまなドメイン固有言語 (DSL) でエンタープライズ統合パターンまたはルートを作成します。
Java DSL - 流れるようなビルダー スタイルを使用する Java ベースの DSL.
エンタープライズ統合パターンのストーリーは、次の概念を中心に解決されます。
メッセージ、エンドポイント、プロデューサー、コンシューマー、ルーティング、バス、トランスフォーム、およびプロセス。
リアルタイムの使用例の 1 つについては、Anirban Konar によるこの記事をご覧ください。
それはサーバーと一緒に行くものですか?
複数のエンタープライズ サブシステム間のブリッジとして機能します。
独立したプログラムですか?
統合フレームワークである Apache Camel は、さまざまな独立したアプリケーションを統合します。
Camel の主な利点: 統合ごとに同じ概念を使用することで、さまざまなアプリケーションをさまざまなテクノロジ (およびさまざまなプロトコル) と統合できます。
コンピューティングにおけるほとんどの「新しい」ものは、まったく新しいものではありません。それらは、すでに十分に理解されているものに対する不可解なラッパーにすぎません。理解するのが難しい場合、それは通常、誰かが新しい言語用語を発明したか、別の目的で既存の用語を植民地化することにしたためです (その良い例は、X 開発者が「クライアント」と「サーバー」の意味を逆にしたことです)。
Camel は、アプリケーション間ミドルウェア用の Java ベースのラッパー/API です。
ミドルウェアとは、共通の言語やデータ型を共有しないエンティティ間で解釈サービスを提供するソフトウェアの総称です。
それがキャメルです。EIPタイプのミドルウェアを提供することに注意することで、説明を具体化できます。
アプリケーションが通信する必要があるものの詳細を知ることができないため、ミドルウェア自体は提供しません。ただし、そのミドルウェアの不変部分を作成するための API を提供します (開始点の作成、終了点の作成、開始と終了の条件の作成など)。
それが役立つことを願っています。
これが別の試みです。
Webmethods、ICAN Seebeyond、Tibco BW、IBM Broker のようなものがどのようにあったか、またはあったかをご存知でしょう。それらはすべて、企業内の統合ソリューションに役立ちました。これらのツールは、一般に Enterprise Application Integration (EAI) ツールという名前で知られています。
ほとんどの場合、これらのテクノロジを中心に構築されたドラッグ ドロップ ツールがあり、一部は Java でアダプターを作成する必要がありました。これらのアダプター コードは、テストされていないか、テストに関するツールや自動化が不十分でした。
プログラミングの設計パターンと同様に、一般的な統合ソリューションのエンタープライズ統合パターンがあります。それらは、グレゴール・ホープとボビー・ウルフによる同名の本によって有名になりました。
1 つまたは複数の EIP を使用する統合ソリューションを実装することは十分に可能ですが、Camel は、XML、Java、Groovy、または Scala のいずれかを使用して、コード ベース内でこれを実行しようとしています。
Camel は、豊富な DSL およびルーティング メカニズムを介して、この本に記載されているすべてのエンタープライズ統合パターンをサポートしています。
したがって、Camel は他の EAI ツールと競合するテクノロジであり、統合コードのテストをより適切にサポートします。ドメイン固有言語 (DSL) を使用しているため、コードは簡潔です。ビジネスユーザーでも読みやすく、無料で生産性を高めます。
簡単に言えば、camel はボイラー プレート コードをあまり使わずに (多くの) 処理を実行します。
概観を示すために、以下に示す Java DSL は、製品のリストで構成される XML を受け入れ、それを複数の製品に分割し、BrandProcessor の Process メソッドを呼び出すことができる REST エンドポイントを作成します。.parallelProcessing を追加するだけで (コメントアウトされた部分に注意してください)、すべての製品オブジェクトを並列処理します。(製品クラスは、入力 xml が制限されている XSD から JAXB/XJC で生成された Java スタブです。) この多くのコード (いくつかの Camel 依存関係と共に) は、数百行の Java コードを必要としたジョブを完了します。
from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);
ルート ID とログ ステートメントを追加した後
from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);
これは単なるサンプルです。Camel は単なる REST エンドポイントではありません。プラグ可能なコンポーネント リストhttp://camel.apache.org/components.htmlをご覧ください。
メッセージングを容易にし、メッセージングの問題を解決するためのフレームワークはたくさんあります。そのような製品の 1 つが Apache Camel です。
一般的な問題のほとんどには、設計パターンと呼ばれる解決策が証明されています。メッセージングの設計パターンは、こちらで詳しく説明されているエンタープライズ統合パターン (EIP)です。Apache camel は、EIP を使用してソリューションを実装するのに役立ちます。
統合フレームワークの強みは、EIP やその他のパターン、トランスポートとコンポーネントの数、および Apache camel がリストのトップに立つ開発の容易さを通じて私たちを容易にする能力です。
各フレームワークには独自の利点があります。Apache camel の特別な機能の一部を次に示します。
Amazon のような e コマース会社を作成し、販売する製品の戦略/選択のみに集中したいとします。Amazonの配送業者とは異なり、売り手から倉庫への商品の移動を自分で処理する代わりに、倉庫で梱包などの変更を行い、他の都市や顧客に発送します。これらすべてを行う会社を雇い、すべての倉庫の場所、車両の種類、配達場所、およびいつ何をするかのリストを提供するだけです. その後、彼らはそれを自分で処理します。それが Apache Camel です。彼らは、あなたが物を引き渡すと、物事を一方の端から他方の端まで移動することを処理します。そのため、他のことに自由に集中できます。
Camel は、ルーティング、変換、監視に役立ちます。
ルートを使用します。次のように記述できます。
サービス バスは、特定のメッセージを受信すると、キューやトピックなどのサービスやブローカーの宛先を経由せずにルーティングします。このパスはルートと呼ばれます。
例: 株式アプリケーションにアナリストからの入力があり、アプリケーション/Web コンポーネントを介して処理され、特定の株式更新に関心のある/登録メンバー全員に結果が公開されます。