第5章 Spring Boot スタンドアロンでの Fuse アプリケーションのアップグレード
Spring Boot で Fuse アプリケーションをアップグレードするには、以下を行います。
- 「Camel 移行に関する考慮事項」で説明するように、Apache Camel の更新について考慮する必要があります。
- Fuse プロジェクトの Maven 依存関係を更新し、Fuse の正しいバージョンを使用するようにする必要があります。
通常は、Maven を使用して Fuse アプリケーションを構築します。Maven は、Apache の無料のオープンソースビルドツールです。Maven 設定は Fuse アプリケーションプロジェクトの pom.xml
ファイルで定義されます。Fuse プロジェクトのビルド中、Maven が外部リポジトリーを探し、必要なアーティファクトをダウンロードするのがデフォルトの動作になります。Maven ビルドプロセスで Fuse がサポートするアーティファクトの正しいセットを選択できるように、Fuse Bill of Materials (BOM) の依存関係を pom.xml
ファイルに追加します。
以下のセクションでは、Maven の依存関係と Fuse プロジェクトでの更新方法を説明します。
5.1. Camel 移行に関する考慮事項
MongoClients ファクトリーを使用した MongoDB への接続の作成
Fuse 7.10 から、com.mongodb.MongoClient
の代わりに com.mongodb.client.MongoClient
を使用して、MongoDB への接続を作成します (フルパスの追加の .client サブパッケージに注意してください)。
既存の Fuse アプリケーションのいずれかが camel-mongodb
コンポーネントを使用する場合は、以下を行う必要があります。
アプリケーションを更新して、接続 Bean を
com.mongodb.client.MongoClient
インスタンスとして作成します。たとえば、以下のように MongoDB への接続を作成します。
import com.mongodb.client.MongoClient;
続いて、以下の例のように MongoClient Bean を作成できます。
return MongoClients.create("mongodb://admin:password@192.168.99.102:32553");
- MongoClient クラスによって公開されたメソッドに関連するコードを評価し、必要に応じリファクターリングします。
Camel 2.23
Red Hat Fuse は Apache Camel 2.23 を使用します。Fuse 7.8 にアップグレードする場合、以下の Camel 2.22 および 2.23 への更新を考慮する必要があります。
Camel 2.22 への更新
- Camel は Spring Boot v1 から v2 にアップグレードされたため、v1 はサポート対象外になりました。
- Spring Framework 5 へのアップグレード。Camel は Spring 4.3.x でも動作しますが、今後 Spring 5.x が今後のリリースで最小の Spring バージョンになります。
- Karaf 4.2 へのアップグレード。Camel は Karaf 4.1 で実行できますが、本リリースでは Karaf 4.2 のみを公式にサポートします。
- toD DSL の使用が最適化され、可能な限りコンポーネントのエンドポイントとプロデューサーを再利用します。たとえば、HTTP ベースのコンポーネントは、同じホストに送信する動的 URI でプロデューサー (HTTP クライアント) を再利用するようになりました。
- read-lock idempotent/idempotent-changed を持つ File2 コンシューマーは、ファイルが処理中であると見なされるウィンドウを拡張するためにリリースタスクを遅らせるように設定できるようになりました。これは、他のノードが、処理されたファイルを処理可能なファイルとしてすぐに認識しないように、共有の idempotent レポジトリーを持つアクティブ/アクティブクラスター設定で使用できます (readLockRemoveOnCommit=true がある場合にのみ必要です)。
- リクエスト/リプライモードの Netty4 プロデューサーでカスタムリクエスト/リプライ相関 ID マネージャー実装をプラグインできるようにします。Twitter コンポーネントはデフォルトで拡張モードを使用し、140 文字を超えるツイートをサポートするようになりました。
- REST DSL プロデューサーが endpointProperties を使用して REST 設定で設定されるようになりました。
- Kafka コンポーネントは、Camel と Kafka メッセージ間のヘッダーマッピングを制御するために、カスタム実装をプラグインするための HeaderFilterStrategy をサポートするようになりました。
- REST DSL は、REST サービスで Content-Type/Accept ヘッダーが使用可能なことを検証するためのクライアント要求検証をサポートするようになりました。
- Camel には Service Registry SPI を持つようになりました。これにより、Camel 実装または Spring Cloud を使用してサービスレジストリー (consul、etcd、zookeeper など) にルートを登録できるようになりました。
- SEDA コンポーネントのデフォルトキューサイズが、無制限ではなく 1000 になりました。
以下の注目すべき問題が修正されました。
- camel-cxf コンシューマーでの CXF の継続タイムアウトの問題が修正されました。この問題により、呼び出し元 SOAP クライアントにタイムアウトをトリガーする代わりに、コンシューマーがデータで応答を返す可能性がありました。
- 堅牢な一方向操作を使用する場合に camel-cxf コンシューマーが UoW をリリースしない問題が修正されました。
- onException などで AdviceWith や weave メソッドを使用しても機能しない問題が修正されました。
- 並列処理およびストリーミングモードの Splitter がブロックされる可能性があり、イテレータが最初に呼び出された next() メソッド呼び出しで例外を出力したときにメッセージ本文を反復する場合がありましたが、この問題が修正されました。
- autoCommitEnable=false の場合、Kafka コンシューマーが自動コミットされないように修正されました。
- ファイルコンシューマーはデフォルトで markerFile を read-lock として使用していましたが、これが修正され、なくなりました。
- Kafka で手動コミットを使用して、以前のレコードオフセットではなく現在のレコードオフセットを提供するように修正されました (最初の場合は -1)。
- 述語の場合に、Java DSL のコンテンツベースのルーターがプロパティープレースホルダーを解決できない問題が解決されました。
Camel 2.23 への更新
- Spring Boot 2.1 へのアップグレード。
- 追加のコンポーネントレベルのオプションが、spring-boot auto-configuration を使用して設定できるようになりました。これらのオプションは、ツールの支援のための spring-boot コンポーネントメタデータ JSON ファイル記述子に含まれます。
- すべてのコンポーネント、データ形式、および言語の Spring Boot 自動設定オプションがすべて含まれるドキュメントセクションが追加されました。
-
すべての Camel Spring Boot スターター JAR には、Spring Boot の自動設定を最適化するために JAR に
META-INF/spring-autoconfigure-metadata.properties
ファイルが追加されるようになりました。 - Throttler は動的表現に基づいた相関グループをサポートするようになりました。これにより、メッセージを異なるスロットルセットにグループ化できるようになりました。
- Hystrix EIP では、再配信でのエラー処理が有効になっている場合に、Hystrix EIP ブロック全体を再度リトライできるように Camel のエラーハンドラーの継承が可能になりました。
- SQL および ElSql コンシューマーが、ルート形式の動的クエリーパラメーターをサポートするようになりました。この機能は、Simple 式を使用した Bean の呼び出しに限定されることに注意してください。
- swagger-restdsl maven プラグインが、Swagger 仕様ファイルから DTO モデルクラスを生成できるようになりました。
以下の注目すべき問題が修正されました。
- Aggregator2 は、すべてのグループの完了を強制するための制御ヘッダーを伝播しないように修正されました。そのため、ルーティング中に後で別のアグリゲーター EIP が使用されても、再び発生することはありません。
- エラーハンドラーで再配信が有効な場合にトレーサーが機能しない問題が修正されました。
- XML ドキュメントの組み込み型コンバーターは、stdout に解析エラーを出力する可能性がありますが、ロギング API を使用して出力するように修正されました。
- メッセージボディーがストリーミングベースであった場合、charset オプションを使用した SFTP のファイル書き込みが動作し無い問題が修正されました。
- 複数のルートをルーティングして 1 つの親スパンにグループ化する場合に、Zipkin ルート ID が再利用されないように修正されました。
- ホスト名に数字の IP アドレスが含まれる場合に、HTTP エンドポイントを使用する場合に最適化された toD にバグがあった問題が修正されました。
- RabbitMQ の一時キューを経由した要求/応答、および手動確認モード使用の問題が修正されました。一時キューを認識しませんでした (要求/応答を可能にするために必要)。
- OPTIONS リクエストの Allow ヘッダーで許可されるすべての HTTP 動詞を返さない可能性のあるさまざまな HTTP コンシューマーコンポーネントが修正されました (rest-dsl を使用する場合など)。
- FluentProducerTemplate のスレッドセーフの問題が修正されました。