エンジニアリングの佐藤匡剛です。19日目のつもりで書いたのですが、もう書けちゃったのでせっかくなのでフライングで投稿します。2.0の登場から、10年ぶりのメジャーアップグレードだそうです。ServiceMixが中心だった頃に、簡潔なDSLで非常に軽量なルーティングエンジンとして登場したCamelが一部で注目を集めつつあったのを思い出します。3の注目ポイントは以下の通りです。様々な機能改善マイグレーションガイド今回は、それぞれの注目ポイントを詳しく解説していきます。Ibsenによる上記英文記事の翻訳ではなく、私なりに噛み砕いた紹介記事なので、興味のある方は英文記事の方も読んでみることをオススメします。Camelの正式なサブプロジェクトとして加わり、3プロジェクト体制になります。2と同じくあらゆるJavaアプリケーションで使えるインテグレーションフレームワーク。Knative上で使えるようにするためのプロジェクト。クラウドベースのランタイムとインテグレーションOperatorを含む。QuarkusのCamelエクステンション。ネイティブコンパイルした超高速Camelアプリケーションが実行可能になる。KはCamelアプリケーションをクラウドネイティブにするためのOperator、という位置付けです。両者は競合するものではなく相互に連携し合います。Quarkus)で動くCamelアプリケーション、といったものが近いうちに実現できるかもしれません。3.0リリース時点ではまだプロポーザル段階でしたが、camel-kafka-connectorも今後、正式にサブプロジェクトに加わりそうです。1)」プロジェクト体制に生まれ変わります。2.xまでは2000年代の古くさいApacheなWebサイトのままでした。3.0リリースを機に、ようやくWebサイトもモダンに生まれ変わりました。camel.apache.org個人的なオススメは、新しくなったCamelコンポーネントレファレンスです。Camelといえば300+あるコンポーネントによって色々な外部システムと連携できるのが一番の売りですが、そのコンポーネントリストが非常に参照しやすくなりました。ボタンが付いたことです。Editボタンをクリックするだけで、GitHubの該当するソースに直接飛んで、そのままGitHub上で修正をプルリクできます。コミュニティへのコントリビューションの敷居がいっそう低くなりましたので、ぜひどんな小さなタイポでも見つけたらコントリビュートしてみてください!私もこういう超細かい修正をちょくちょくコントリビュートしています。11を正式にサポートする最初のバージョンになります。8のEOLに合わせて将来の3.xバージョンではいずれサポートが外されることになります。モジュール化されたcamel-coreCamelクラウドネイティブ化の一環でアプリケーションのフットプリントを軽量化するため、camel-coreのリファクタリング(さらに細かいJARへの分割)が行われました。3からは本当に必要な依存JARだけをパッケージできるようになります。細かい話は、古市さんの翻訳記事に書かれています。rheb.hatenablog.comCamelユーザの観点で大事なのは、camel-api、camel-support、camel-core-engineの3つです。Camelの基本的なAPI(CamelContext、Endpoint、Exchange、Messageなど)が含まれます。APIの基本実装クラスが提供されます。Camelルートエンジンの実装です。Clausの英文記事にはRouteBuilderはcamel-supportに含まれると書いてあるのですが、見たかぎりRouteBuilderはcamel-core-engineに含まれています。このモジュール化で大事なポイントの1つは、これまで組み込みコンポーネントとしてcamel-coreに同梱されていたDirectやLogなどの基本コンポーネントもすべて外だしされたことです。camel-beancamel-logcamel-stubcamel-browsecamel-mockcamel-timercamel-controlbuscamel-propertiescamel-validatorcamel-dataformatcamel-refcamel-vmcamel-directcamel-restcamel-xpathcamel-directvmcamel-sagacamel-xsltcamel-filecamel-schedulercamel-zip-deflatercamel-languagecamel-sedaこれからは、本当に必要なコンポーネントだけを使って可能な限り軽量にCamelアプリケーションを作っていくのが推奨スタイルになります。救済措置として本当にミニマルなcamel-core-engineの他に、上記基本コンポーネントを含んだ「レガシー」なcamel-coreも提供されます。3の軽量なスタイルへ書き換えるまでの移行措置として、この従来型camel-coreを使うことができます。起動高速化とフットプリント軽量化camel-coreモジュール化の結果として、メモリにロードされるクラスの数が削減されました。3では4300に減ったそうです。それに加えて、リフレクションで実装されていた箇所を静的コード生成で置き換えるという最適化も行われています。Quarkusの取り組みとも連動しているのですが、リフレクションを使わないことでプログラム起動の高速化を図るとともに、Quarkusでネイティブコンパイル可能にもしています。3単体での一番の売りはここかなと思っています。3を試してみたくなるのではないでしょうか。「タイプセーフ」なエンドポイントDSLというのは、要するに従来のテキストベースのtimer:click?period=3000&fixedRate=trueといった定義でなく、URIのパラメータも含めてメソッドチェーンでエンドポイントを定義できるDSLのことです。テキストベースではパラメータ名が間違ってないか、パラメータの値の型(intなど)が正しいか、といったことを厳密にはコンパイル時にチェックできませんでした。.to("seda:foo?blockWhenFull=true");メソッドチェーンのDSLになることで、Javaのコンパイル時型チェックでそういったエラーを検査できるようになります。.to(seda("foo").blockWhenFull(true));エンドポイントDSLを使うには、pom.xmlのdependencyにcamel-endpointdslを追加し、RouteBuilderの代わりにEndpointRouteBuilderを使ってルートを定義します。}};サンプルプロジェクトは以下を見てみてください。内部実装の話で今のところユーザには直接影響ないですが、ルーティングエンジンがリアクティブに書き換えられました。3の計画が立てられていた時点ではこのリアクティブ化が目玉機能になる予定だったのですが、実際に蓋を開けてみると約束通りこの目標が達成はされたものの他の注目機能に比べて地味な位置付けになっています。私も実際にどうリアクティブに書き換えられたのかまだ追えていないのですが、おそらくはスレッドを使わなくなることでリソース消費が効率的になる他に、今までのスレッドベースのエンジンではルート内で例外が発生した際にスタックトレースが冗長になっていたものがより短く簡潔になる、などの恩恵がある(はず)です。APIをベースにしたリアクティブなクライアントAPIを導入する構想があります。BootやKarafなどのランタイムなしにスタンドアローンでCamelアプリケーションを実行しやすいように、camel-mainライブラリが外だしされました。これもクラウドネイティブ化の一環で、アプリケーションに不必要なランタイムの依存をなるべく取り除いていこうという方向性にあるものです。実際の使用サンプルについては、以下を見てみてください。MicroProfileとの連携も進められています。具体的には、MicroProfileの設定、メトリクス、ヘルスチェック、耐障害性などをサポートしたコンポーネントが新たに作られました。Quarkusにも対応しています。3.0にはその他にも細かな修正や機能改善がいっぱい入っています。Clausの英文記事で言われている点を箇条書きするとこんなところです。10といいつつ11個目があるのはご愛嬌です。3の注目ポイント紹介だけで十分お伝えすべきボリュームがあったので、予定を変更してこの記事を書きました。3はなるべく後方互換性を尊重しつつ作られているとはいえ、10年ぶりのメジャーアップグレードなので、技術的負債の返済も含めて変わるべきところは変わっています。2.xアプリケーションを3.0にアップグレードするには、このマイグレーションガイドに沿ってプロジェクトを修正していく必要があります。Camelこのガイドの紹介は年明けにでも書こうと思っているので、ご期待ください。ミドルウェアのサポートをしている三浦です。Hatソフトウェアエンジニアの佐藤匡剛です。Hatの佐藤匡剛です。各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。