Red Hat build of Apache Camel for Spring Boot への移行
Red Hat build of Apache Camel for Spring Boot への移行
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 移行ガイドについて リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、アプリケーションを移行するときに考慮する必要がある Apache Camel コンポーネントの変更について詳しく説明します。また、次の変更に関する情報を提供します。
- サポートされる Java バージョン
- Apache Camel コンポーネントと非推奨コンポーネントの変更
- API と非推奨 API の変更
- EIP の更新
- トレースとヘルスチェックの更新
第2章 Apache Camel 4 への移行 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Apache Camel アプリケーションをバージョン 3.20 以降から 4.0 に移行するのに役立つ情報を提供します。3.14 などの古い Camel 3.x リリースからアップグレードする場合は、Apache Camel 4 にアップグレードする前に、各 アップグレードガイド を参照して 3.20 リリースにアップグレードしてください。
2.1. Java バージョン リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel 4 は Java 17 をサポートします。Java 11 のサポートは終了します。
2.2. 削除されたコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
次のコンポーネントが削除されました。
| コンポーネント | 代替コンポーネント |
|---|---|
| camel-any23 | none |
| camel-atlasmap | none |
| camel-atmos | none |
| camel-caffeine-lrucache | camel-cache、camel-ignite、camel-infinispan |
| camel-cdi | camel-spring-boot、camel-quarkus |
| camel-corda | none |
| camel-directvm | camel-direct |
| camel-dozer | camel-mapstruct |
| camel-elasticsearch-rest | camel-elasticsearch |
| camel-gora | none |
| camel-hbase | none |
| camel-hyperledger-aries | none |
| camel-iota | none |
| camel-ipfs | none |
| camel-jbpm | none |
| camel-jclouds | none |
| camel-johnzon | camel-jackson、camel-fastjson、camel-gson |
| camel-microprofile-metrics | camel-micrometer、camel-opentelemetry |
| camel-milo | none |
| camel-opentracing | camel-micrometer、camel-opentelemetry |
| camel-rabbitmq | spring-rabbitmq-component |
| camel-rest-swagger | camel-openapi-rest |
| camel-restdsl-swagger-plugin | camel-restdsl-openapi-plugin |
| camel-resteasy | camel-cxf、camel-rest |
| camel-solr | none |
| camel-spark | none |
| camel-spring-integration | none |
| camel-swagger-java | camel-openapi-java |
| camel-websocket | camel-vertx-websocket |
| camel-websocket-jsr356 | camel-vertx-websocket |
| camel-vertx-kafka | camel-kafka |
| camel-vm | camel-seda |
| camel-weka | none |
| camel-xstream | camel-jacksonxml |
| camel-zipkin | camel-micrometer、camel-opentelemetry |
2.3. ロギング リンクのコピーリンクがクリップボードにコピーされました!
Camel 4 では、ロギングファサード API slf4j-api が 1.7 から 2.0 にアップグレードされました。
2.4. JUnit 4 リンクのコピーリンクがクリップボードにコピーされました!
JUnit 4.x ベースの camel-test モジュールはすべて削除されました。テストモジュールはすべて JUnit 5 を使用するようになりました。
2.5. API の変更 リンクのコピーリンクがクリップボードにコピーされました!
次の API は非推奨となり、バージョン 4 から削除されました。
-
org.apache.camel.ExchangePatternからInOptionalOutを削除しました。 -
getEndpointMap()メソッドをCamelContextから削除しました。 -
@FallbackConverterを削除しました。代わりに@Converter(fallback = true)を使用する必要があります。 -
@EndpointInject、@Produce、および@Consumeのuri属性を削除しました。代わりにvalue(デフォルト) を使用する必要があります。たとえば、@Produce(uri = "kafka:cheese")は、@Produce("kafka:cheese")に変更する必要があります。 -
@UriEndpointのlabelを削除しました。代わりにcategoryを使用する必要があります。 -
ProducerTemplateのすべてのasyncCallbackメソッドを削除しました。代わりにasyncSendまたはasyncRequestを使用してください。 -
org.apache.camel.spi.OnCamelContextStartを削除しました。代わりにorg.apache.camel.spi.OnCamelContextStartingを使用してください。 -
org.apache.camel.spi.OnCamelContextStopを削除しました。代わりにorg.apache.camel.spi.OnCamelContextStoppingを使用してください。 -
org.apache.camel.ExtendedCamelContextをorg.apache.camel.CamelContextから分離しました。 -
org.apache.camel.CamelContextのadapt()をgetCamelContextExtensionに置き換えました。 -
org.apache.camel.Exchangeからorg.apache.camel.ExtendedExchangeを分離しました。 -
org.apache.camel.ExtendedExchangeのadapt()をgetExchangeExtensionに置き換えました。 -
Exchange の障害処理ステータスが、
ExchangePropertyKey.FAILURE_HANDLEDとして定義されたプロパティーから、`isFailureHandled()` メソッドを介してアクセスできる ExtendedExchange のメンバーに移動しました。 -
org.apache.camel.util.concurrent.ThreadPoolRejectedPolicyからDiscardとDiscardOldestを削除しました。 -
org.apache.camel.builder.SimpleBuilderを削除しました。これは主に、Camel の内部で、場合によっては Java DSL とともに使用されていました。 -
org.apache.camel.support.IntrospectionSupportを、内部使用専用とするためにcamel-core-engineに移動しました。エンドユーザーは代わりにorg.apache.camel.spi.BeanInspectionを使用する必要があります。 -
org.apache.camel.catalog.CamelCatalogからarchetypeCatalogAsXmlメソッドを削除しました。 -
org.apache.camel.health.HealthCheckメソッドisLivenessが、デフォルトでtrueではなくfalseになりました。 -
org.apache.camel.StreamCacheにpositionメソッドを追加しました。 -
インターフェイス
org.apache.camel.main.Listenerのconfigureメソッドを削除しました。 -
org.apache.camel.support.EventNotifierSupport抽象クラスがCamelContextAwareを実装するようになりました。 -
CamelContextのdumpRoutesのタイプが、booleanからStringに変更され、xml または yaml のいずれかを指定できるようになりました。
org.apache.camel.support.PluginHelper を使用すると、以前 Camel v3 で CamelContext から直接利用できたさまざまなエクステンションやコンテキストプラグインに簡単にアクセスできます。
2.6. EIP の変更 リンクのコピーリンクがクリップボードにコピーされました!
-
各 EIP の
<description>のlang属性を削除しました。 -
InOnlyおよびInOutEIP を削除しました。代わりに、使用するエクスチェンジパターンを指定できるSetExchangePatternまたはToを使用してください。
2.6.1. エンリッチポーリング EIP リンクのコピーリンクがクリップボードにコピーされました!
ポーリングされるエンドポイント URI が、他のすべての EIP と同様に、Exchange のプロパティーとして (キー CamelToEndpoint とともに) 保存されるようになりました。これは URI がメッセージヘッダーとして保存される前に実行されます。
2.6.2. CircuitBreaker EIP リンクのコピーリンクがクリップボードにコピーされました!
camel-resilience4j の次のオプションが、誤りにより、属性として定義されていませんでした。
| オプション |
| bulkheadEnabled |
| bulkheadMaxConcurrentCalls |
| bulkheadMaxWaitDuration |
| timeoutEnabled |
| timeoutExecutorService |
| timeoutDuration |
| timeoutCancelRunningFuture |
これらのオプションは YAML DSL では公開されませんでした。XML DSL では以下から移行する必要があります。
代わりに次の属性を使用してください。
<circuitBreaker>
<resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
<circuitBreaker>
<resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>
2.7. XML DSL リンクのコピーリンクがクリップボードにコピーされました!
ルートまたはノードに説明を設定する <description> が要素から属性に変更されました。
例
変更前
<route id="myRoute"> <description>Something that this route do</description> <from uri="kafka:cheese"/> ... </route>
<route id="myRoute">
<description>Something that this route do</description>
<from uri="kafka:cheese"/>
...
</route>
終了
[source,xml
<route id="myRoute" description="Something that this route do"> <from uri="kafka:cheese"/> ... </route>
<route id="myRoute" description="Something that this route do">
<from uri="kafka:cheese"/>
...
</route>
2.8. 型コンバーター リンクのコピーリンクがクリップボードにコピーされました!
String → java.io.File コンバーターは削除されました。
2.9. トレーシング リンクのコピーリンクがクリップボードにコピーされました!
Tracer および Backlog Tracer に、Rest DSL、ルートテンプレート、または Kamelet によって作成されたルートからの内部トレースイベントが含まれなくなりました。これをオンにするには、トレーサーで traceTemplates=true を設定します。
Backlog Tracer が強化され、メッセージヘッダー (およびストリーミングタイプ) をトレースするように 修正 されました。以前は InputStream タイプのヘッダーがトレースされていませんでしたが、現在はトレース対象に含まれます。そのため、ヘッダーストリームを最後に配置し、その後ヘッダーをログに記録すると、ヘッダー値が空であると表示される可能性があります。
2.10. UseOriginalMessage / UseOriginalBody リンクのコピーリンクがクリップボードにコピーされました!
useOriginalMessage または useOriginalBody が OnException、OnCompletion またはエラーハンドラーで有効になっている場合、元のメッセージボディーが防御的にコピーされ、アクセス時にボディーを再読み取りできるように、可能な場合は StreamCache に変換されます。以前は、元のボディーが StreamCache に変換されなかったため、ボディーを読み取れなかったり、ストリームが閉じられたりする可能性がありました。
2.11. Camel の正常性 リンクのコピーリンクがクリップボードにコピーされました!
ヘルスチェックは、デフォルトですぐに使用できる readiness チェックのみになりました。Camel は、CamelContextCheck を readiness チェックと liveness チェックの両方の形で提供するため、すぐに使用できる状態のチェックがそれぞれ少なくとも 1 つあります。デフォルトでは、コンシューマーベースのヘルスチェックのみが有効になっています。
2.11.1. プロデューサーのヘルスチェック リンクのコピーリンクがクリップボードにコピーされました!
オプション camel.health.components-enabled の名前が camel.health.producers-enabled に変更されました。
一部のコンポーネント (特に AWS) は、プロデューサーのヘルスチェックも提供します。Camel 3.x では、これらのヘルスチェックは正しく機能せず、ソースで無効になっています。Camel 4 でもこの動作を継続するために、プロデューサーベースのヘルスチェックは無効になっています。
camel-kafka には、Camel 3 で機能していたプロデューサーベースのヘルスチェックが付属しています。そのため、Camel 4 でのこの変更により、このヘルスチェックが無効になることに注意してください。
application.properties などでプロデューサーのヘルスチェックをグローバルに有効にする 必要があります。
camel.health.producers-enabled = true
camel.health.producers-enabled = true
2.12. JMX リンクのコピーリンクがクリップボードにコピーされました!
Camel のプロセッサー MBean のツリーに、doCatch および doFinally の MBean も含まれるようになりました。
ManagedChoiceMBean の名前が、choiceStatistics から extendInformation に変更されました。ManagedFailoverLoadBalancerMBean の名前が、exceptionStatistics から extendInformation に変更されました。
CamelContextMBean と CamelRouteMBean から、メソッド dumpRouteAsXml(boolean resolvePlaceholders, boolean resolveDelegateEndpoints) が削除されました。
2.13. YAML DSL リンクのコピーリンクがクリップボードにコピーされました!
route の子として steps を持つことができる下位互換性モード (Camel 3.14 以前) が削除されました。
古い構文:
- route:
from:
uri: "direct:info"
steps:
- log: "message"
- route:
from:
uri: "direct:info"
steps:
- log: "message"
これを次のように変更する必要があります。
- route:
from:
uri: "direct:info"
steps:
- log: "message"
- route:
from:
uri: "direct:info"
steps:
- log: "message"
2.14. バックログのトレース リンクのコピーリンクがクリップボードにコピーされました!
オプション backlogTracing=true が自動的に有効になり、起動時にトレーサーが開始するようになりました。以前のバージョンでは、トレーサーは利用可能になるだけで、後で手動で有効にする必要がありました。backlogTracingStandby=true を設定すると、古い動作を実現できます。
次のクラスを、camel-management-api JAR の org.apache.camel.api.management.mbean.BacklogTracerEventMessage から、camel-api JAR の org.apache.camel.spi.BacklogTracerEventMessage に移動します。
org.apache.camel.impl.debugger.DefaultBacklogTracerEventMessage が、トレースされたメッセージに関する追加の詳細を備えたインターフェイス org.apache.camel.spi.BacklogTracerEventMessage にリファクタリングされました。たとえば、Camel は入力メッセージと出力メッセージ (InOut の場合) を含む 最初 と 最後 のトレースをキャプチャーするようになりました。
2.15. XML シリアライゼーション リンクのコピーリンクがクリップボードにコピーされました!
ModelToXMLDumper を使用したデフォルトの XML シリアライザーが改善され、camel-jaxb の JAXB ベースの XML シリアライザーではなく、camel-xml-io モジュールにある生成された XML シリアライザーを使用するようになりました。
2.16. OpenAPI Maven プラグイン リンクのコピーリンクがクリップボードにコピーされました!
camel-restdsl-openapi-plugin Maven プラグインが、生成された Rest DSL コード内のデフォルトの REST コンポーネントとして platform-http を使用するようになりました。以前のデフォルトはサーブレットでした。platform-http は、Spring Boot および Quarkus でそのまま使用できる、より優れたデフォルトです。
2.17. コンポーネントの変更 リンクのコピーリンクがクリップボードにコピーされました!
2.17.1. カテゴリー リンクのコピーリンクがクリップボードにコピーされました!
org.apache.camel.Category の列挙型の数が 83 から 37 に削減されました。つまり、削除された値を使用しているカスタムコンポーネントに、残りの値の 1 つを指定する必要があります。これは、Camel コミュニティー内のすべてのコンポーネントのカテゴリーの数を整理するために行われました。
2.17.2. camel-openapi-rest-dsl-generator リンクのコピーリンクがクリップボードにコピーされました!
この DSL ジェネレーターでは、基礎となるモデルクラス (apicurio-data-models) が 1.1.27 から 2.0.3 に更新されました。
2.17.3. camel-atom リンクのコピーリンクがクリップボードにコピーされました!
camel-atom コンポーネントのサードパーティーの Atom クライアントが、Apache Abdera から RSSReader に変更されました。これにより、フィードオブジェクトが org.apache.abdera.model.Feed から com.apptasticsoftware.rssreader.Item に変更されました。
2.17.4. camel-azure-cosmosdb リンクのコピーリンクがクリップボードにコピーされました!
itemPartitionKey が更新されました。これは PartitionKey ではなく String になりました。詳細は、CAMEL-19222 を参照してください。
2.17.5. camel-bean リンクのコピーリンクがクリップボードにコピーされました!
method オプションを使用して特定のメソッドを参照し、"bean:myBean?method=foo(com.foo.MyOrder, true)" などのパラメーターの型と値を使用する場合、すべてのクラス型が .class 構文を使用する必要があります。つまり、com.foo.MyOrder は com.foo.MyOrder.class にする必要があります。
例
"bean:myBean?method=foo(com.foo.MyOrder.class, true)"
"bean:myBean?method=foo(com.foo.MyOrder.class, true)"
これは、String、int などの Java 型にも当てはまります。
"bean:myBean?method=bar(String.class, int.class)"
"bean:myBean?method=bar(String.class, int.class)"
2.17.6. camel-box リンクのコピーリンクがクリップボードにコピーされました!
Box Java SDK v2 から v4 にアップグレードされ、メソッドのシグネチャーがいくつか変更されました。ファイルのサムネイルを取得するメソッドは利用できなくなりました。
2.17.7. camel-caffeine リンクのコピーリンクがクリップボードにコピーされました!
keyType パラメーターが削除されました。キャッシュのキーは String 型のみになりました。詳細は、CAMEL-18877 を参照してください。
2.17.8. camel-fhir リンクのコピーリンクがクリップボードにコピーされました!
基盤となる hapi-fir ライブラリーが 4.2.0 から 6.2.4 にアップグレードされました。Delete API メソッドのみが変更され、org.hl7.fhir.instance.model.api.IBaseOperationOutcome ではなく ca.uhn.fhir.rest.api.MethodOutcome を返すようになりました。基礎となる変更の詳細なリストについては、hapi-fhir を参照してください (Camel では hapi-fhir クライアントのみが使用されます)。
2.17.9. camel-google リンクのコピーリンクがクリップボードにコピーされました!
API ベースのコンポーネント camel-google-drive、camel-google-calendar、camel-google-sheets、および camel-google-mail が、Google Java SDK v1 から v2 および最新の API リビジョンにアップグレードされました。camel-google-drive と camel-google-sheets では、API メソッドがいくつか変更されていますが、その他は以前と同じです。
2.17.10. camel-http リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、Apache HttpComponents v5 を使用するようにアップグレードされました。これは、基礎となるクライアントの設定方法に影響を与えます。当初の 3 つのタイムアウト (connectionRequestTimeout、connectTimeout、および socketTimeout) ではなく、4 つの異なるタイムアウト (connectionRequestTimeout、connectTimeout、soTimeout、および responseTimeout) があります。これらの一部のデフォルト値が変更されているため、ドキュメントで詳細を参照してください。
HttpClient の可能な設定パラメーターから socketTimeout が削除されていることに注意してください。代わりに responseTimeout を使用してください。
最後に、オプション soTimeout と SocketConfig に含まれるパラメーターには、接頭辞として httpConnection を付ける必要があります。HttpClientBuilder および RequestConfig に定義されているパラメーターを含む残りのパラメーターには、以前のように接頭辞として httpClient を付ける必要があります。
2.17.11. camel-http-common リンクのコピーリンクがクリップボードにコピーされました!
org.apache.camel.http.common.HttpBinding の API が、再利用しやすいようにわずかに変更されました。parseBody メソッドが、入力パラメーターとして HttpServletRequest を受け取るようになりました。また、すべての HttpMessage が汎用の Message タイプに変更されました。
2.17.12. camel-kubernetes リンクのコピーリンクがクリップボードにコピーされました!
io.fabric8:kubernetes-client ライブラリーがアップグレードされ、一部の非推奨の API 使用法が削除されました。以前、replace という接頭辞が付けられていた操作に、update という接頭辞が付けられるようになりました。
たとえば、replaceConfigMap は updateConfigMap になり、replacePod は updatePod になりました。KubernetesOperations クラスの対応する定数の名前も変更されました。REPLACE_CONFIGMAP_OPERATION は UPDATE_CONFIGMAP_OPERATION に、REPLACE_POD_OPERATION は UPDATE_POD_OPERATION になりました。
2.17.13. camel-main リンクのコピーリンクがクリップボードにコピーされました!
次の定数は BaseMainSupport / Main から MainConstants に移動しました。
| 以前の名前 | 新しい名前 |
|---|---|
| Main.DEFAULT_PROPERTY_PLACEHOLDER_LOCATION | MainConstants.DEFAULT_PROPERTY_PLACEHOLDER_LOCATION |
| Main.INITIAL_PROPERTIES_LOCATION | MainConstants.INITIAL_PROPERTIES_LOCATION |
| Main.OVERRIDE_PROPERTIES_LOCATION | MainConstants.OVERRIDE_PROPERTIES_LOCATION |
| Main.PROPERTY_PLACEHOLDER_LOCATION | MainConstants.PROPERTY_PLACEHOLDER_LOCATION |
2.17.14. camel-micrometer リンクのコピーリンクがクリップボードにコピーされました!
メトリクスの名前が、Micrometer の命名規則に従って変更されました。
| 以前の名前 | 新しい名前 |
| CamelExchangeEventNotifier | camel.exchange.event.notifier |
| CamelExchangesFailed | camel.exchanges.failed |
| CamelExchangesFailuresHandled | camel.exchanges.failures.handled |
| CamelExchangesInflight | camel.exchanges.external.redeliveries |
| CamelExchangesSucceeded | camel.exchanges.succeeded |
| CamelExchangesTotal | camel.exchanges.total |
| CamelMessageHistory | camel.message.history |
| CamelRoutePolicy | camel.route.policy |
| CamelRoutePolicyLongTask | camel.route.policy.long.task |
| CamelRoutesAdded | camel.routes.added |
| CamelRoutesRunning | camel.routes.running |
2.17.15. camel-jbang リンクのコピーリンクがクリップボードにコピーされました!
コマンド camel dependencies の名前が camel dependency に変更されました。
Camel JBang では、init および run ゴールの -dir パラメーターの名前が変更され、他のすべてのオプションと同様に 2 つのダッシュ --dir が必要になりました。
camel stop コマンドは、デフォルトで実行中のすべてのインテグレーションを停止します (オプション --all は削除されました)。
プレースホルダー置換 が、$name 構文ではなく #name を使用するように変更されました。
2.17.16. camel-openapi-java リンクのコピーリンクがクリップボードにコピーされました!
camel-openapi-java コンポーネントが、io.apicurio.datamodels ではなく io.swagger.v3 ライブラリーを使用するように変更されました。その結果、パブリックメソッド org.apache.camel.openapi.RestOpenApiReader.read() の戻り値の型が、io.apicurio.datamodels.openapi.models.OasDocument ではなく io.swagger.v3.oas.models.OpenAPI になりました。OpenAPI 2.0 (swagger) 仕様が解析されると、swagger パーサーによって OpenAPI 3.0.x に自動的にアップグレードされます。このバージョンでは、OpenAPI 3.1.x 仕様もサポートされています。関連する spring-boot スターターコンポーネントが、新しい戻り値の型を使用するように変更されました。
2.17.17. camel-salesforce リンクのコピーリンクがクリップボードにコピーされました!
生成された DTO の Blob フィールドのプロパティー名に 'Url' が付加されなくなりました。たとえば、ContentVersionUrl プロパティーは ContentVersion になりました。
2.17.18. camel-slack リンクのコピーリンクがクリップボードにコピーされました!
Slack によって頻繁にレートが制限されるのを避けるために、slack コンシューマーのデフォルトの遅延が 0.5 秒から 10 秒に変更されました。
2.17.19. camel-spring-rabbitmq リンクのコピーリンクがクリップボードにコピーされました!
camel-spring-rabbitmq のオプション replyTimeout が修正され、デフォルト値が 5 - 30 秒になりました (これは Spring で使用されるデフォルト値です)。
2.18. Camel Spring Boot (Spring Boot で実行) リンクのコピーリンクがクリップボードにコピーされました!
camel-spring-boot 依存関係に、camel-spring-xml が含まれなくなりました。Spring Boot 上の Camel でレガシー Spring XML ファイル <beans> を使用するには、camel-spring-boot-xml-starter 依存関係を含めてください。
2.18.1. 正常シャットダウン リンクのコピーリンクがクリップボードにコピーされました!
Camel は、Spring Boot のシャットダウン時に、少し遅れてシャットダウンするようになりました。これにより、Spring Boot の正常シャットダウンが完了 (Spring Boot HTTP サーバーが正常に停止) した後、Camel が独自の Graceful Shutdown を実行できるようになります。
技術的には、camel-spring の getPhase() の戻り値が、Integer.MAX_VALUE から Integer.MAX_VALUE - 2049 に変更されました。これにより、Spring Boot サービスが先にシャットダウンする余裕が生まれます。
2.18.2. camel-micrometer-starter リンクのコピーリンクがクリップボードにコピーされました!
uri タグが (デフォルトで) 動的ではなく静的になりました。動的値を持つ URI が原因で、非常に多くのタグが生成される可能性があるためです。これは、camel.metrics.uriTagDynamic=true を設定することで再度有効にできます。
2.18.3. camel-platform-http-starter リンクのコピーリンクがクリップボードにコピーされました!
platform-http-starter は、camel-servlet ではなく、Spring HTTP サーバーを直接使用するように変更されました。したがって、すべての HTTP エンドポイントに、サーブレットのコンテキストパス (デフォルトは camel) が接頭辞として付けられなくなりました。
以下に例を示します。
from("platform-http:myservice")
.to("...")
from("platform-http:myservice")
.to("...")
以前は、myservice を呼び出すには、http://localhost:8080/camel/myservice などのコンテキストパスを含める必要がありました。現在、このコンテキストパスは使用されていないため、http://localhost:8080/myservice を使用してエンドポイントを呼び出すことができます。
platform-http-starter を Rest DSL とともに使用することもできます。
ルートまたはコンシューマーが一時停止している場合、http ステータス 404 ではなく 503 が返されるようになりました。
2.18.4. camel-twitter リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは Twitter4j バージョン 4.1.2 を使用するように更新されました。これに伴い、いくつかのクラスで使用される パッケージ が移動しました。Twit ステータスなどの特定の Twitter 関連データにアクセスする場合は、使用するパッケージを twitter4j.Status から twitter4j.v1.Status に更新する必要があります。
第3章 Apache Camel 3 への移行 リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、Spring Boot での Red Hat Fuse 7 から Camel 3 への移行に関する情報を提供します。
- 注記
Fuse 7 と Camel 3 の間には、モジュール化や XML スキーマの変更など、コンポーネントに重要な違いがあります。詳細は、各コンポーネントのセクションを参照してください。
3.1. Java バージョン リンクのコピーリンクがクリップボードにコピーされました!
Camel 3 は Java 17 および Java 11 をサポートしますが、Java 8 はサポートしていません。
Java 11 では、JAXB モジュールが JDK から 削除 されたため、Maven の依存関係として追加する必要があります (XML DSL または camel-jaxb コンポーネントを使用する場合などに JAXB を使用する場合)。
注記: Java Platform Standard Edition 11 Development Kit (JDK 11) は、Camel Spring Boot 3.x リリースバージョンでは非推奨となり、それ以降の 4.x リリースバージョンではサポートされません。
3.2. camel-core のモジュール化 リンクのコピーリンクがクリップボードにコピーされました!
Camel 3.x では、camel-core は次のように多くの JAR に分割されています。
- camel-api
- camel-base
- camel-caffeine-lrucache
- camel-cloud
- camel-core
- camel-jaxp
- camel-main
- camel-management-api
- camel-management
- camel-support
- camel-util
- camel-util-json
Apache Camel の Maven ユーザーは、camel-main を除くすべてのモジュールに対する推移的な依存関係を持つ依存関係 camel-core を引き続き使用できるため、移行は必要ありません。
3.3. コンポーネントのモジュール化 リンクのコピーリンクがクリップボードにコピーされました!
Camel 3.x では、camel-core コンポーネントの一部が個別のコンポーネントに移動されました。
- camel-attachments
- camel-bean
- camel-browse
- camel-controlbus
- camel-dataformat
- camel-dataset
- camel-direct
- camel-directvm
- camel-file
- camel-language
- camel-log
- camel-mock
- camel-ref
- camel-rest
- camel-saga
- camel-scheduler
- camel-seda
- camel-stub
- camel-timer
- camel-validator
- camel-vm
- camel-xpath
- camel-xslt
- camel-xslt-saxon
- camel-zip-deflater
3.4. デフォルトのシャットダウンストラテジー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camelは、ルートを適切な方法でシャットダウンする役割を持つ org.apache.camel.spi.ShutdownStrategy を使用したシャットダウンストラテジーをサポートしています。Red Hat build of Apache Camelは、ルートのグレースフルシャットダウンを処理するためのデフォルトストラテジーを org.apache.camel.impl.engine.DefaultShutdownStrategy で提供しています。
DefaultShutdownStrategy クラスは、Apache Camel 3.x の org.apache.camel.impl パッケージから org.apache.camel.impl.engine に移動されました。
単純な定期実行ルートポリシーを設定してルートを停止すると、ルートの停止アルゴリズムが自動的に正常シャットダウンの手順に統合されます。よって、タスクは現在のエクスチェンジが処理を完了するまで待機してから、ルートをシャットダウンします。ただし、タイムアウトを設定することで、ルートがエクスチェンジの処理を終了したかどうかにかかわらず、指定した時間後にルートを強制的に停止することができます。
グレースフルシャットダウン中に、org.apache.camel.impl.engine.DefaultShutdownStrategy で DEBUG ロギングレベルを有効にすると、同じインフライトエクスチェンジ情報がログに記録されます。
2015-01-12 13:23:23,656 [- ShutdownTask] INFO DefaultShutdownStrategy - There are 1 inflight exchanges: InflightExchange: [exchangeId=ID-test-air-62213-1421065401253-0-3, fromRouteId=route1, routeId=route1, nodeId=delay1, elapsed=2007, duration=2017]
2015-01-12 13:23:23,656 [- ShutdownTask] INFO DefaultShutdownStrategy - There are 1 inflight exchanges:
InflightExchange: [exchangeId=ID-test-air-62213-1421065401253-0-3, fromRouteId=route1, routeId=route1, nodeId=delay1, elapsed=2007, duration=2017]
これらのログを表示したくない場合は、logInflightExchangesOnTimeout オプションを false に設定してこれをオフにできます。
context.getShutdownStrategegy().setLogInflightExchangesOnTimeout(false);
context.getShutdownStrategegy().setLogInflightExchangesOnTimeout(false);
3.5. アプリケーションごとの複数の CamelContext のサポートを削除 リンクのコピーリンクがクリップボードにコピーされました!
複数の CamelContext のサポートが削除され、デプロイごとに 1 つの CamelContext のみが推奨およびサポートされるようになりました。そのため、@EndpointInject、@Produce、@Consume などのさまざまな Camel アノテーションの context 属性が削除されました。
3.6. 非推奨の API とコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.x の非推奨の API とコンポーネントはすべて Camel 3 で削除されました。
3.6.1. 削除されたコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.x の非推奨コンポーネントはすべて Camel 3.x で削除され、古い camel-http、camel-hdfs、camel-mina、camel-mongodb、camel-netty、camel-netty-http、camel-quartz、camel-restlet、および camel-rx コンポーネントも削除されました。
-
camel-jibxコンポーネントが削除されました。 -
camel-boonデータ形式が削除されました。 -
Linkedin API 1.0 が サポートされなくなった ため、
camel-linkedinコンポーネントが削除されました。新しい 2.0 API のサポートは、CAMEL-13813 で追跡されています。 -
camel-zookeeperのルートポリシー機能が削除されました。代わりにZooKeeperClusterServiceまたはcamel-zookeeper-masterコンポーネントを使用してください。 -
camel-jettyコンポーネントはプロデューサーをサポートしなくなりました (プロデューサーは削除されました)。代わりにcamel-httpコンポーネントを使用してください。 -
twitter-streamingコンポーネントは、非推奨の Twitter Streaming API に依存していたため削除され、機能しなくなりました。
3.6.2. コンポーネントの名前変更 リンクのコピーリンクがクリップボードにコピーされました!
次のコンポーネントは、Camel 3.x で名前が変更になりました。
-
camel-microprofile-metricsの名前がcamel-micrometerに変更になりました。 -
testコンポーネントは、dataset-testに名前が変更になり、camel-coreからcamel-datasetJAR に移動しました。 -
http4コンポーネントの名前がhttpに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.http4からorg.apache.camel.component.httpに変更になりました。サポートされているスキームは、現在httpとhttpsのみです。 -
hdfs2コンポーネントの名前がhdfsに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.hdfs2からorg.apache.camel.component.hdfsに変更になりました。サポートされるスキームはhdfsになりました。 -
mina2コンポーネントの名前がminaに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.mina2からorg.apache.camel.component.minaに変更になりました。サポートされるスキームはminaになりました。 -
mongodb3コンポーネントの名前がmongodbに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.mongodb3からorg.apache.camel.component.mongodbに変更になりました。サポートされるスキームはmongodbになりました。 -
netty4-httpコンポーネントの名前がnetty-httpに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.netty4.httpからorg.apache.camel.component.netty.httpに変更になりました。サポートされるスキームはnetty-httpになりました。 -
netty4コンポーネントの名前がnettyに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.netty4からorg.apache.camel.component.nettyに変更になりました。サポートされるスキームはnettyになりました。 -
quartz2コンポーネントの名前がquartzに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.quartz2からorg.apache.camel.component.quartzに変更になりました。サポートされているスキームはQuartzになりました。 -
rxjava2コンポーネントの名前がrxjavaに変更になり、対応するコンポーネントパッケージがorg.apache.camel.component.rxjava2からorg.apache.camel.component.rxjavaに変更になりました。 -
camel-jetty9の名前がcamel-jettyに変更になりました。サポートされているスキームはjettyになりました。
3.7. Camel コンポーネントの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.7.1. Mock コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
mock コンポーネントは camel-core から移動しました。このため、アサーション句ビルダー の多くのメソッドが削除されています。
3.7.2. ActiveMQ リンクのコピーリンクがクリップボードにコピーされました!
activemq-camel コンポーネントを使用している場合は、コンポーネント名が org.apache.activemq.camel.component.ActiveMQComponent から org.apache.camel.component.activemq.ActiveMQComponent に変更になった camel-activemq コンポーネントを使用するように移行する必要があります。
3.7.3. AWS リンクのコピーリンクがクリップボードにコピーされました!
コンポーネント camel-aws が複数のコンポーネントに分割されました。
- camel-aws-cw
- camel-aws-ddb (ddb と ddbstreams コンポーネントの両方を含む)
- camel-aws-ec2
- camel-aws-iam
- camel-aws-kinesis (kinesis と kinesis-firehose コンポーネントの両方を含む)
- camel-aws-kms
- camel-aws-lambda
- camel-aws-mq
- camel-aws-s3
- camel-aws-sdb
- camel-aws-ses
- camel-aws-sns
- camel-aws-sqs
- camel-aws-swf
これらのコンポーネントに特定の依存関係を追加することを推奨します。
3.7.4. Camel CXF リンクのコピーリンクがクリップボードにコピーされました!
camel-cxf JAR が、SOAP と REST、および Spring と Spring 以外の JAR に分割されました。came-cxf から移行する場合は、次のリストから特定の JAR を選択することが推奨されます。
-
camel-cxf-soap -
camel-cxf-spring-soap -
camel-cxf-rest -
camel-cxf-spring-rest -
camel-cxf-transport -
camel-cxf-spring-transport
たとえば、SOAP および Spring XML で CXF を使用している場合は、camel-cxf から移行するときに camel-cxf-spring-soap および camel-cxf-spring-transport を選択します。
Spring Boot を使用する場合は、camel-cxf-starter から SOAP または REST に移行する際に、以下のスターターから選択します。
-
camel-cxf-soap-starter -
camel-cxf-rest-starter
3.7.4.1. Camel CXF の名前空間の変更 リンクのコピーリンクがクリップボードにコピーされました!
camel-cxf XML XSD スキーマも名前空間が変更になりました。
| 古い名前空間 | 新しい名前空間 |
|---|---|
camel-cxf SOAP コンポーネントは新しい jaxws サブパッケージに移動しました。つまり、org.apache.camel.component.cxf が org.apache.camel.component.cxf.jaws になりました。たとえば、CxfComponent クラスは org.apache.camel.component.cxf.jaxws に置かれるようになりました。
3.7.5. FHIR リンクのコピーリンクがクリップボードにコピーされました!
camel-fhir コンポーネントでは、hapi-fhir 依存関係が 4.1.0 にアップグレードされました。デフォルトの FHIR バージョンが R4 に変更になりました。したがって、DSTU3 が必要な場合は、明示的に設定する必要があります。
3.7.6. Kafka リンクのコピーリンクがクリップボードにコピーされました!
camel-kafka コンポーネントでは、オプション bridgeEndpoint と circularTopicDetection が削除されました。これは、このコンポーネントが Camel 2.x のブリッジングのように機能するようになり、不要になったためです。つまり、camel-kafka はエンドポイント uri からトピックにメッセージを送信します。これをオーバーライドするには、新しいトピックで KafkaConstants.OVERRIDE_TOPIC ヘッダーを使用します。詳細は、camel-kafka コンポーネントのドキュメントを参照してください。
3.7.7. Telegram リンクのコピーリンクがクリップボードにコピーされました!
camel-telegram コンポーネントでは、認可トークンが uri-path からクエリーパラメーターに移動しました。以下に例を示します。
telegram:bots/myTokenHere
telegram:bots/myTokenHere
移動後は次のようになります。
telegram:bots?authorizationToken=myTokenHere
telegram:bots?authorizationToken=myTokenHere
3.7.8. JMX リンクのコピーリンクがクリップボードにコピーされました!
camel-core のみを依存関係として使用して Camel スタンドアロンを実行し、JMX を初期設定で有効にする場合は、camel-management を依存関係として追加する必要があります。
ManagedCamelContext を使用するには、次のように CamelContext からこのエクステンションを取得する必要があります。
ManagedCamelContext managed = camelContext.getExtension(ManagedCamelContext.class);
ManagedCamelContext managed = camelContext.getExtension(ManagedCamelContext.class);
3.7.9. XSLT リンクのコピーリンクがクリップボードにコピーされました!
XSLT コンポーネントは、camel-core から camel-xslt および camel-xslt-saxon に移動しました。JDK の XSTL エンジン (Xalan) を使う場合は camel-xslt、Saxon を使う場合は camel-xslt-saxon というように分けられています。そのため、Camel エンドポイント URI のコンポーネント名には、xslt および xslt-saxon を使用する必要があります。XSLT 集約ストラテジーを使用している場合は、Saxon のサポートのために org.apache.camel.component.xslt.saxon.XsltSaxonAggregationStrategy を使用します。また、xslt ビルダーを使用する場合は、Saxon のサポートのために org.apache.camel.component.xslt.saxon.XsltSaxonBuilder を使用します。なお、allowStax は JDK の XSLT ではサポートされておらず、camel-xslt-saxon でのみサポートされています。
3.7.10. XML DSL の移行 リンクのコピーリンクがクリップボードにコピーされました!
XML DSL が若干変更になりました。
カスタムロードバランサーの EIP が <custom> から <customLoadBalancer> に変更になりました。
XMLSecurity データ形式では、<secureXML> タグの keyOrTrustStoreParametersId 属性の名称が keyOrTrustStoreParametersRef に変更されました。
<zipFile> データ形式が <zipfile> に名前が変更になりました。
3.8. Camel Maven プラグインの移行 リンクのコピーリンクがクリップボードにコピーされました!
camel-maven-plugin は 2 つの Maven プラグインに分割されました。
camel-maven-plugin-
camel-maven-plugin には
runゴールがあります。これは、Camel アプリケーションをスタンドアロンですばやく実行することを目的としたものです。詳細は、https://camel.apache.org/manual/camel-maven-plugin.html を参照してください。 camel-report-maven-plugin-
camel-report-maven-pluginには、Camel エンドポイント URI の検証やルートカバレッジレポートなど、Camel プロジェクトのレポートの生成に使用されるvalidateゴールやroute-coverageゴールがあります。詳細は、https://camel.apache.org/manual/camel-report-maven-plugin.html を参照してください。