Menu Close

第5章 Karaf スタンドアロンでの Fuse アプリケーションのアップグレード

Karaf で 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 の移行に関する考慮事項

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 へのアップグレードKaraf 4.1 で Camel を実行することはできますが、本リリースでは、Karaf 4.2 のみを公式にサポートしています。
  • toD DSL を使用して最適化され、可能な場合はコンポーネントのエンドポイントとプロデューサーを再利用します。たとえば、HTTP ベースのコンポーネントは、同じホストに送信する動的 URI でプロデューサー (HTTP クライアント) を再利用するようになりました。
  • 読み取りロック idempotent/idempotent-changed を持つ File2 コンシューマーは、ファイルが処理中と見なされる際にリリースタスクを遅らせてウィンドウを拡張するように構成できるようになりました。これは、共有のべき等リポジトリーでアクティブ/アクティブクラスター設定で使用でき、他のノードが処理済みファイルを処理可能なファイルとしてすばやく認識しないようにします (readLockRemoveOnCommit=true がある場合にのみ必要です)。
  • 要求/応答モードで Netty4 プロデューサーにカスタム要求/応答相関 ID マネージャーの実装をプラグインできるようにします。Twitter コンポーネントは、デフォルトで拡張モードを使用して、140 文字を超えるツイートをサポートするようになりました。
  • REST DSL プロデューサーは、endpointProperties を使用して REST 設定での設定をサポートするようになりました。
  • Kafka コンポーネントは、Camel メッセージと Kafka メッセージ間のヘッダーマッピングを制御するためのカスタム実装をプラグインする HeaderFilterStrategy をサポートするようになりました。
  • REST DSL は、REST サービスで Content-Type/Accept ヘッダーが可能であることを検証するためのクライアント要求検証をサポートするようになりました。
  • Camel には、Camel 実装または Spring Cloud を使用してサービスレジストリー (consul、etcd、zookeeper など) へのルートを登録できる Service Registry SPI があります。
  • SEDA コンポーネントのデフォルトのキューサイズが無制限ではなく 1000 になりました。
  • 以下の重要な問題が修正されました。

    • camel-cxf コンシューマーで CXF 継続タイムアウトの問題が修正されました。これは、コンシューマーが呼び出しの SOAP クライアントのタイムアウトをトリガーするのではなく、データで応答を返す原因となっていました。
    • 堅牢な一方向操作を使用しているときに、camel-cxf コンシューマーが UoW を解放しない問題を修正しました。
    • AdviceWith の使用と onException などでの weave メソッドの使用が機能しない問題を修正しました。
    • 最初に呼び出された next() メソッド呼び出しでイテレーターが例外をスローすると、メッセージ本文を反復しているときに、並列処理およびストリーミングモードの Splitter がブロックされる可能性のある問題を修正しました。
    • autoCommitEnable=false の場合に、Kafka コンシューマーが自動コミットしないように修正しました。
    • ファイルコンシューマーが、none であるのはずの markerFile をデフォルトで読み取りロックとして使用していた問題が修正されました。
    • Kafka で手動コミットを使用して、以前のレコードオフセットではなく現在のレコードオフセット (最初は -1) を提供する問題を修正しました。
    • Java DSL のコンテンツベースルーターが述語時におけるプロパティープレースホルダーを解決しない場合の問題が修正されました。

Camel 2.23 の更新

  • Spring Boot 2.1 へのアップグレード
  • spring-boot 自動設定を使用して、追加のコンポーネントレベルのオプションを設定できるようになりました。これらのオプションは、ツール支援の spring-boot コンポーネントメタデータ JSON ファイル記述子に含まれます。
  • すべてのコンポーネント、データ形式、および言語のすべての Spring Boot 自動設定オプションを含むドキュメントセクションを追加しました。
  • すべての Camel Spring Boot スターター JAR には、Spring Boot の自動設定を最適化するために JAR に META-INF/spring-autoconfigure-metadata.properties ファイルが追加されるようになりました。
  • Throttler は、動的な式に基づく相関グループをサポートするようになったため、メッセージを別の throttled セットにグループ化できるようになりました。
  • Hystrix EIP では、Camel のエラーハンドラーへの継承が可能になり、再配信でエラー処理を有効にしている場合に Hystrix EIP ブロック全体を再試行できるようになりました。
  • SQL および ElSql コンシューマーは、ルート形式の動的クエリーパラメーターをサポートするようになりました。この機能は、単純な式を使用した Bean の呼び出しに限定されていることに注意してください。
  • swagger-restdsl maven プラグインは、Swagger 仕様ファイルからの DTO モデルクラスの生成をサポートするようになりました。
  • 以下の重要な問題が修正されました。

    • Aggregator2 は、すべてのグループの完了を強制するための制御ヘッダーを伝達しないように修正されているため、ルーティング中に後で別のアグリゲーター EIP が使用されても、再び発生することはありません。
    • エラーハンドラーで再配信が有効化された場合に Tracer が機能しない問題を修正しました。
    • XML ドキュメントの組み込み型コンバーターは、解析エラーを stdout に出力する場合がありますが、これはロギング API を使用して出力するように修正されました。
    • メッセージ本文がストリーミングベースの場合、charset オプションを使用した SFTP 書き込みファイルが機能しない問題を修正しました。
    • 複数のルートをルーティングしてそれらを単一の親スパンにグループ化するときに、Zipkin ルート ID が再利用されないように修正しました。
    • ホスト名に数字の IP アドレスが含まれている場合に、バグがあった HTTP エンドポイントを使用するときに最適化された toD を修正しました。
    • 一時キューを介した要求/応答と手動確認モードの使用に関する RabbitMQ の問題を修正しました。(要求/応答を可能にするために必要な) 一時キューを確認しません。
    • OPTIONS リクエストの Allow ヘッダーで許可されたすべての HTTP 動詞を返さない可能性があるさまざまな HTTP コンシューマーコンポーネントを修正しました (rest-dsl を使用する場合など)。
    • FluentProducerTemplate のスレッドセーフティーの問題を修正しました。