Apache Camel 3とQuarkus

Red Hatソフトウェアエンジニアの佐藤匡剛です。

昨晩のRHTN #2にお越しいただいた皆様、ありがとうございました。自分が担当したLTのスライドはこちらにアップロードしました。

www.slideshare.net

しかし、さすがに5分というのはちょっと話し足りなかった(かつ最近は引き篭もっていて滑舌悪く上手く話せなかった)ので、こちらで少し補足したいと思います。

Camel 3の注目ポイント

今回のLTの目玉だったので、スライドをそのまま再掲します。

  • 後方互換性の維持
  • camel-core の軽量&モジュール化
  • API 整理&技術負債の解消
  • 型安全な Fluent Builder エンドポイント定義の導入
  • 新しいクラウド EIP パターン
  • Quarkus エクステンション
  • Camel-K (前回 RHTN の元ネタ)
  • Java 11 サポート
  • タイムボックスリリース
  • 新しいウェブサイト/ドキュメント

後方互換性の維持

なるべくCamel 2ベースのアプリを壊さないように、とはいえ、やはりメジャーアップグレードなのでそれなりに変わります。Camel 2 -> 3のマイグレーションガイドは以下になります。

すでにCamel 3.0.0 M2がリリースされていますので、興味ある方はこのガイドをたよりにさっそくCamel 3を試してみましょう!

Fluent Builderエンドポイント

この時点で4分の鐘が鳴ってしまい、あせってほとんどお話できなかったのですが、Camel 3の注目機能の1つになるかなと思います。

元々、昨年のブログでAkka / AlpakkaとCamelを比較するという記事が界隈で少し話題になったことがあって、その中でAkka / Alpakkaとの比較で「Camelは全然型安全じゃないじゃん!」と煽られたことがありました(笑)。

www.thedevpiece.com

それに対するCamelコミュニティからの返答が、このFluent Builderエンドポイントになります。これまでのCamelは、エンドポイントURLがすべてテキストベースでコンパイル時の型チェックが出来なかったのですが(一応、その代わりIDEのプラグインでパラメータをチェックしてくれるツールが豊富に揃っています)、

from("file:inbox?recursive=true&withDelay=2000")
    .to("jms:queue:cheese?withTimeToLive=5000");

それをこのようにメソッドチェーンでも定義できるようにしよう、というものです。

from(file("inbox").recursive().withDelay(2000))
    .to(jms("cheese").withTimeToLive(5000));

こうすると、IDEのコード補完でより簡単にエンドポイント定義ができるようになるだけでなく、パラメータの型チェックまで出来るのでより安全かつ便利になります。

しかし、来月リリース予定のM3ではまだこの機能は完成しておらず、かなり大変な作業が残っているはずなので、本当にGAリリースまでに載ってくるのかちょっと心配ではあります。

Camel meets Quarkus

最後に、デモでチラッとだけお見せしたQuarkusエクステンションの話をちょっとだけしたいと思います。

Quarkusについては、須江さんのLTで紹介もあったようにまずはGet Startedガイドから始めてみるといいと思います。

quarkus.io

Quarkusは基本的にMaven(またはGradle)コマンドを使って開発していくんですが、以下のMavenコマンドで現在サポートされているエクステンションのリストを見ることができます。

$ mvn quarkus:list-extensions
...
Current Quarkus extensions available: 
Status   Extension           ArtifactId                 Updated Version   Guide
...
current  Camel Core          quarkus-camel-core         0.15.0
         Camel Infinispan    quarkus-camel-infinispan
         Camel Netty4 HTTP   quarkus-camel-netty4-http
         Camel Salesforce    quarkus-camel-salesforce
...

見ての通り現時点ではまだ4つのCamelコンポーネントに対してしかエクステンションがありません。これをGAまでにもっと拡充させていく予定です。とはいえ、camel-coreとHTTP(camel-netty4-http)だけでもある程度のことは出来るので、現時点でもそれなりに遊ぶことはできます。

QuarkusアプリにCamelのエクステンションを追加するには、以下のMavenコマンドを実行します。

$ mvn quarkus:add-extension -Dextensions="quarkus-camel-core"

LTで紹介したCamel + Quarkusデモのソースコードはこちらです。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。