Apache Camel 2.19.0 がリリースされたので、注目機能をまとめてみる。
http://camel.apache.org/camel-2190-release.html
Apache Camel とは
Apache Camel は 軽量かつ高機能なインテグレーションフレームワーク。Java で作られているが、Scala、Kotlin、Clojure など他の JVM 言語上でも使えるはずである。
- デフォルトで 200 以上用意されているコンポーネントを使って、様々な外部サービスやインタフェースに接続できる。
- Java / XML DSL で Enterprise Integration Patterns (EIP) が完全に実装されていて、外部からの入出力メッセージをきれいにルーティングできる。
- 単一の JAR ライブラリとしてプログラムに組み込む用途から、JBoss Fuse のようなフルスタックの ESB サーバのコアルーティングエンジンとしての用途まで、幅広く使える。
- Spring Boot をサポートしていて、クラウド上でのマイクロサービスな使い方もできる。
2.19.0 の注目機能
一番の目玉は、Camel Connector の導入。その他、追加された機能は数が多いので、細かいものは省略して注目すべきもののみ以下にリストアップした。(全部を確認したい方は、こちらを参照。)
- Camel Connector が新たに導入された。Connector は Component よりもユースケースを絞って、すぐに外部システムと連携できるようにしたもの。本格的なインテグレーションエンジニアでないシチズンインテグレータ(a.k.a. iPaaS ユーザ)が、簡単にシステム間連携を組めることを目指したもの。
- Spring Boot
- Spring Boot 1.5.x にアップグレード。
- すべての Camel Spring Boot starter コンポーネントがメタデータのデフォルト値を持つようにし、各種開発ツールから確認できるようにした。
- Camel Spring Boot starter コンポーネントは自動設定を
org.apache.camel.springboot.CamelAutoConfiguration
に依存するようにした。こうすることで、単体テストでorg.apache.camel.springboot.CamelAutoConfiguration
を除くことで Camel Spring Boot の自動設定を無効にできるようになった。
- ツール系
- Camel Maven Plugin に
camel:validate
ゴールを追加。コンパイル時に Java / XML ルート DSL のバリデーションができる。 - Camel Main、Spring Boot、および Camel Maven Plugin が自動で JVM を停止するようになった。停止条件は、一定時間の経過、全メッセージ処理終了、および一定のアイドル時間、を設定できる。
- Camel Maven Plugin が XML DSLからのライブリロードをできるようになった。Main クラスからも、ライブリロードの設定が可能。
- OWASP dependency check Maven プラグインのサポート。
- Camel Maven Plugin に
- Camel 3.0 で廃止予定のコンポーネントと camel-core API をさらに非推奨にした。
- Camel のソースコードを Java 9 でもビルドできるようにした。
-
ReloadStrategy
SPI を導入した。これにより、カスタムプロバイダがルートのライブリロードを開始できるようになる。 - Camel Catalog による、特定のコンポーネント、言語、データ形式しかサポートしないカスタムランタイムプロバイダのサポート。サンプルは
camel-catalog-provider-karaf
(Karaf) とcamel-catalog-provider-springboot
(Spring Boot) を参照。 - Failover Load Balancer に
inheritErrorHandler=false
を設定した場合、ロードバランサが枯渇したあとに Camel の Error Handler が実行されるようになった。 - Camel ルートの XML ダンプが
xpath
表記のカスタム名前空間を含むようにした。同様に、XML Camel ルートを編集するとxpath
表記の名前空間が追加される。 -
RouteIdFactory
の追加。RouteIdFactory
を使えば、ルート ID をroute1
、route2
よりも意味のある名前に自動設定できる。 - Simple 言語に
skip
関数を追加。 - Jetty 9.3 へアップグレード。(Karaf 4.0.x ユーザ向けに Jetty 9.2 は引き続きサポート。)
- サンプルのまとめをソースコードから生成するようにしたので、常に最新の状態を確認できるようになった。https://github.com/apache/camel/tree/master/examples#examples
- データ型に基づく宣言的な Transformer と Validator を導入。使い方のサンプルは
camel-example-transformer-blueprint
、camel-example-transformer-cdi
、camel-example-transformer-demo
、camel-example-validator-spring-boot
を参照。
コンポーネント別の新機能
- Bean コンポーネント
-
Callable
インスタンスを返すメソッドを呼び出した場合、そのCallable
のメソッドも呼び出すようにした。それによって、Groovy の関数/クロージャなどが呼び出せるようになった。
-
- Salesforce コンポーネント
-
limits
,recent items
,approvals
andcomposite
API のサポート。
-
- NATS コンポーネント
- TLS とコネクション自動フラッシュのサポート。
- Metrics コンポーネント
-
Gauge
タイプサポート。
-
- File コンポーネント
-
idempotent-changed
またはidempotent-rename
によるクラスタリングの読込ロック・ストラテジのサポート。
-
- CDI コンポーネント
- RouteBuilder auto-configuration can now be disabled from Camel CDI configuration
- Camel contexts automatic start can now be disabled from Camel CDI configuration
- Camel CDI now provides support for TransactionErrorHandler and TransactionPolicy via JTA
- Kafka コンポーネント
- オフセット状態をオフラインに保存(
stateRepository
)して、前回のオフセットから再開できるようにした。 - コンポーネントをより簡単に設定/利用できるように改良した。
- Idempotent Consumer EIP 向けの、Kafka によるトピックベースのべき等リポジトリの導入。
- メッセージ送信時にメッセージボディを自動で型変換するようにした(デフォルトのシリアライザは
String
)。また、key
とpartitionKey
をエンドポイント URI で指定できるようになった。 - Kafka Consumer が停止時に自動コミットできるようになった。
autoCommitOnStop
オプションの値は次の通り:sync
,async
,none
- オフセット状態をオフラインに保存(
- Box コンポーネント
- v2 Java API に移行。
- JPA コンポーネント
- JPA Producer のクエリサポート追加。