3.2. Apache Camel 4로 마이그레이션


이 섹션에서는 Apache Camel 애플리케이션을 버전 3.20 이상에서 4.0으로 마이그레이션하는 데 도움이 되는 정보를 제공합니다.

참고

개별 버전에 대한 자세한 내용은 다음을 참조하십시오.

Apache Camel Quarkus를 업그레이드하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

3.2.1. Java 버전

Apache Camel 4는 Java 17을 지원합니다. Java 11에 대한 지원이 중단되었습니다.

3.2.2. 제거된 구성 요소

다음 구성 요소가 제거되었습니다.

Expand
Component대체 구성 요소

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-d Cryostater

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

3.2.3. 로깅

Camel 4에서 로깅 facade API slf4j-api 를 1.7에서 2.0으로 업그레이드했습니다.

3.2.4. JUnit 4

JUnit 4.x 기반이었던 모든 camel-test 모듈이 제거되었습니다. 이제 모든 테스트 모듈에서 JUnit 5를 사용합니다.

3.2.5. API 변경 사항

다음 API는 더 이상 사용되지 않으며 버전 4에서 제거됩니다.

  • org.apache.camel.ExchangePatternInOptionalOut 을 제거했습니다.
  • CamelContext 에서 getEndpointMap() 메서드를 제거합니다.
  • 대신 @Converter(fallback = true) 를 사용해야 하므로 제거된 @FallbackConverter.
  • 대신 value (기본값)를 사용해야 하므로 @EndpointInject,@Produce, @Consume 에서 제거된 uri 속성입니다. 예를 들어 @Produce(uri = "kafka:cheese")@Produce("kafka:cheese")로 변경해야 합니다.
  • 대신 카테고리 를 사용해야 하므로 @UriEndpoint 에서 삭제된 레이블 입니다.
  • 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.ExtendedCamelContextorg.apache.camel.CamelContext 에서 분리했습니다.
  • org.apache.camel.CamelContextadapt()getCamelContextExtension로 교체
  • org.apache.camel.ExtendedExchangeorg.apache.camel.Exchange 에서 분리했습니다.
  • org.apache.camel.ExtendedExchangeadapt()getExchangeExtension로 교체
  • 교환 실패 처리 상태가 ExchangePropertyKey.FAILURE_HANDLED 로 정의된 속성에서 'isFailureHandled()'method를 통해 액세스할 수 있는 ExtendedExchange의 멤버로 이동했습니다.
  • org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy 에서 제거된 DiscardDiscardOldest.
  • 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 에서 제거된 archetype CatalogA Cryostat 메서드.
  • org.apache.camel.health.HealthCheck 메서드는 이제 true 대신 기본 false 입니다.
  • org.apache.camel.StreamCache위치 메서드를 추가했습니다.
  • org.apache.camel.main.Listener 인터페이스에서 구성된 방법이 제거되었습니다.
  • org.apache.camel.support.EventNotifierSupport 추상 클래스는 이제 CamelContextAware 를 구현합니다.
  • CamelContextdumpRoutes 유형이 부울 에서 String 으로 변경되어 xml 또는 yaml을 지정할 수 있습니다.
참고

org.apache.camel.support.PluginHelper 는 Camel v3에서 이전에 Camel v3에서 직접 사용할 수 있는 다양한 확장 및 컨텍스트 플러그인에 쉽게 액세스할 수 있습니다.

3.2.6. EIP 변경 사항

  • 모든 EIP에서 < description> 에 대해 lang 특성을 제거합니다.
  • InOnlyInOut EIPs가 제거되었습니다. 대신 SetExchangePattern 또는 To 를 사용하여 사용할 교환 패턴을 지정할 수 있습니다.

3.2.6.1. poll Enrich EIP

폴링된 엔드포인트 URI는 이제 다른 모든 EIP와 마찬가지로 Exchange (키 CamelToEndpoint)에 속성으로 저장됩니다. URI가 메시지 헤더로 저장되기 전에

3.2.6.2. CircuitBreaker EIP

camel-resilience4j 의 다음 옵션은 실수로 속성으로 정의되지 않았습니다.

Expand

옵션

bulkheadEnabled

bulkheadMaxConcurrentCalls

bulkheadMaxWaitDuration

timeoutEnabled

timeoutExecutorService

timeoutDuration

timeoutCancelRunningFuture

이러한 옵션은 YAML DSL에 노출되지 않았으며 XML DSL에서 마이그레이션해야 합니다.

<circuitBreaker>
    <resilience4jConfiguration>
        <timeoutEnabled>true</timeoutEnabled>
        <timeoutDuration>2000</timeoutDuration>
    </resilience4jConfiguration>
...
</circuitBreaker>

대신 다음 속성을 사용하려면 다음을 수행합니다.

<circuitBreaker>
    <resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
...
</circuitBreaker>

3.2.7. XML DSL

경로 또는 노드에 대한 설명을 설정하는 <description>이 요소에서 특성으로 변경되었습니다.

<route id="myRoute" description="Something that this route do">
  <from uri="kafka:cheese"/>
  ...
</route>

3.2.8. 유형:

문자열 java.io.File 변환기가 제거되었습니다.

3.2.9. 추적

TracerBacklog Tracer 에는 Rest DSL 또는 경로 템플릿 또는 Kamelets에서 생성한 경로의 내부 추적 이벤트가 더 이상 포함되지 않습니다. 추적기에서 traceTemplates=true 를 설정하여 이를 켤 수 있습니다.

Backlog Tracer 가 메시지 헤더(또한 스트리밍 유형)를 추적하도록 개선되고 수정되었습니다. 즉, 이전에 InputStream 유형의 헤더는 이전에 추적되지 않았지만 이제 포함됩니다. 이는 헤더 스트림이 끝에 배치되고 나중에 헤더를 로깅하면 헤더 값이 비어 있으므로 표시될 수 있습니다.

3.2.10. UseOriginalMessage / UseOriginalBody

When useOriginalMessage or useOriginalBody is enabled in OnException,OnCompletion or error handlers, then the original message body is defensively copied and if possible converted to StreamCache to ensure the body can be re-read when accessed. 이전에는 원래 본문이 StreamCache 로 변환되지 않아 본문에서 읽을 수 없거나 스트림을 닫을 수 없었습니다.

3.2.11. Camel Health

이제 상태 점검은 기본적으로 준비 상태 점검만 가능합니다. Camel은 준비 및 활성 점검으로 CamelContextCheck 를 제공하므로 각 검사 중 하나 이상이 있습니다. 기본적으로 소비자 기반 상태 점검만 활성화됩니다.

3.2.11.1. 생산자 상태 점검

camel.health.components-enabled 옵션의 이름이 camel.health.producers-enabled 로 변경되었습니다.

Camel 3.x에서는 이러한 상태 점검이 제대로 작동하지 않고 소스에서 비활성화된 일부 구성 요소(특히 AWS)도 생산자에 대한 상태 점검을 제공합니다. Camel 4에서 이 동작을 계속 진행하려면 생산자 기반 상태 점검이 비활성화됩니다.

camel-kafka 에는 Camel 3에서 작동한 생산자 기반 상태 점검이 포함되어 있으므로 Camel 4의 변경 사항은 이 상태 점검이 비활성화되어 있음을 의미합니다.

application.properties 와 같이 생산자 상태 점검을 전역적으로 활성화해야 합니다.

camel.health.producers-enabled = true

3.2.12. JMX

Camel에는 이제 doCatchdoFinally 의 프로세서 트리에 doCatch에 대한 Cryostat도 포함되어 있습니다.

ManagedChoiceMBeanchoiceStatistics 의 이름이 확장됨으로 변경되었습니다. ManagedFailoverLoadBalancerMBeanexceptionStatistics 의 이름이 확장됨으로 변경되었습니다.

CamelContextMBeanCamelRouteMBean 에서 메서드 dumpRouteAs Cryostat(boolean resolvePlaceholders, boolean resolveDelegateEndpoints) 를 제거했습니다.

3.2.13. YAML DSL

이전 버전과 호환되는 Camel 3.14 이상에서는 하위 경로가 제거되었으므로 단계를 수행할 수 있습니다.

새 구문은 다음과 같습니다.

- route:
    from:
      uri: "direct:info"
      steps:
      - log: "message"

3.2.14. Backlog 추적

이제 시작 시 추적기를 시작하도록 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은 이제 입력 및 발신( Out 인 경우) 메시지가 포함된 첫 번째마지막 추적을 캡처합니다.

3.2.15. XML serialization

ModelTo XMLDumper 를 사용한 기본 xml 직렬화가 개선되었으며 이제 camel-jaxb 의 기반이 되는 CryostatB 대신 camel-xml-io 모듈에 있는 생성된 xml serializer를 사용합니다.

3.2.16. OpenAPI Maven 플러그인

이제 camel-restdsl-openapi-plugin Maven 플러그인은 Quarkus와 함께 즉시 작동하는 더 나은 기본값이므로 생성된 Rest DSL 코드의 기본 나머지 구성 요소로 platform-http 를 사용합니다.

3.2.17. 구성 요소 변경

3.2.17.1. 카테고리

org.apache.camel.Category 에 대한 열거 수가 83에서 37로 감소했습니다. 즉, 제거된 값을 사용하는 사용자 지정 구성 요소가 나머지 값 중 하나를 선택해야 합니다. Camel 커뮤니티에서 모든 구성 요소의 카테고리 수를 통합하기 위해 이 작업을 수행했습니다.

3.2.17.2. camel-openapi-rest-dsl-generator

이 dsl-generator는 기본 모델 클래스 (apicurio-data-models)를 1.1.27에서 2.0.3으로 업데이트했습니다.

3.2.17.3. Camel-atom

camel-atom 구성 요소가 3rd party atom 클라이언트를 Apache Abdera에서 RSS Cryostat로 변경했습니다. 즉, feed 오브젝트가 org.apache.abdera.model.Feed 에서 com.apptasticsoftware.rssreader.Item 로 변경됩니다.

3.2.17.4. camel-azure-cosmosdb

항목을 업데이트 했습니다. 이제 더 이상 PartitionKey가 아닌 문자열입니다. 자세한 내용은 CAMEL-19222에서 참조하십시오.

3.2.17.5. Camel-bean

메서드 옵션을 사용하여 특정 메서드를 참조하고 매개 변수 유형 및 값을 사용하는 경우 "bean:myBean? method =foo(com.foo.MyOrder, true)"와 같은 클래스 유형을 이제 . class 구문 i.e. com.foo.MyOrder를 사용해야 합니다. com.foo.MyOrder 는 이제 com.foo.MyOrder.class 여야 합니다.

"bean:myBean?method=foo(com.foo.MyOrder.class, true)"

이는 String, int와 같은 Java 유형에도 적용됩니다.

"bean:myBean?method=bar(String.class, int.class)"

3.2.17.6. Camel-box

일부 메서드 서명 변경 사항이 있는 Box Java SDK v2에서 v4로 업그레이드되었습니다. 파일 모음을 가져오는 방법은 더 이상 사용할 수 없습니다.

3.2.17.7. Camel-caffeine

keyType 매개변수가 제거되었습니다. 이제 캐시의 Key는 문자열 유형일 뿐입니다. CAMEL-18877에 대한 자세한 정보

3.2.17.8. camel-fhir

기본 hapi-fhir 라이브러리가 4.2.0에서 6.2.4로 업그레이드되었습니다. Delete API 메서드만 변경되었으며 이제 org.hl7 .fhir.instance.model.api.IBaseOperationOutcome 대신 ca.uhn.rest.api.Method Outcome을 반환합니다. 기본 변경 사항의 자세한 목록은 hapi-fhir 에서 참조하십시오( Camel에서 hapi-fhir 클라이언트만 사용됨).

3.2.17.9. Camel-google

API 기반 구성 요소 camel-google-drive,camel-google-calendar,camel-google-sheetscamel-google-mail 이 Google Java SDK v1에서 v2로 업그레이드되었으며 최신 API 리버전으로 업그레이드되었습니다. camel-google-drivecamel-google-sheets 에는 일부 API 방법이 변경되었지만 다른 API 방법은 이전과 동일합니다.

3.2.17.10. camel-http

구성 요소가 기본 클라이언트 구성 방식에 영향을 미치는 Apache CryostatComponents v5를 사용하도록 업그레이드되었습니다. 초기 3(connectionRequestTimeout,connectTimeoutsocketTimeout) 대신 4개의 다른 시간 초과(connectionRequestTimeout,connectTimeoutresponseTimeout)와 일부의 기본값이 변경되었습니다. 자세한 내용은 설명서를 참조하십시오.

socketTimeout 이 가능한 구성 매개 변수에서 제거되었으므로 대신 responseTimeout 을 사용합니다.

마지막으로, SocketConfig 에 포함된 매개변수와 함께 옵션 soTimeouthttpConnection로 접두사를 붙여야 합니다.. . 나머지 매개변수는 이전과 같이 httpClient 가 접두사로 묶어야 합니다.

3.2.17.11. camel-http-common

org.apache.camel.http.common.HttpBinding 의 API는 재사용 가능하도록 약간 변경되었습니다. parseBody 메서드는 이제 Cryostat ServletRequest 에서 입력 매개 변수로 사용합니다. 또한 모든 CryostatMessage 가 일반 메시지 유형으로 변경되었습니다.

3.2.17.12. Camel-kubernetes

io.fabric8:kubernetes-client 라이브러리가 업그레이드되었으며 더 이상 사용되지 않는 일부 API 사용이 제거되었습니다. 이전에 교체가 붙은 작업 앞에 update 가 붙습니다.

예를 들어 replaceConfigMap 은 이제 updateConfigMap 이므로replacePod 는 이제 updatePod 등입니다. KubernetesOperations 의 해당 상수도 이름이 변경됩니다. REPLACE_CONFIGMAP_OPERATIONUPDATE_CONFIGMAP_OPERATION,REPLACE_POD_OPERATIONUPDATE_POD_OPERATION 이 되었습니다.

3.2.17.13. camel-web3j

camel-web3j 는 많은 API가 변경된 web3j JAR를 3.x에서 5.0으로 업그레이드했기 때문에 일부 이전 API 호출은 오래 제공되지 않습니다.

3.2.17.14. Camel-main

다음 상수는 BaseMainSupport / Main에서 Main Constants 로 이동했습니다.

Expand
오래된 이름새 이름

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

3.2.17.15. Camel-micrometer

메트릭은 Micrometer 이름 지정 규칙을 따르도록 이름이 변경되었습니다.

Expand

오래된 이름

새 이름

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

3.2.17.16. Camel-jbang

camel 종속 항목의 이름이 camel 종속성 으로 변경되었습니다.

Camel에서 initrun-dir 매개변수는 다른 모든 옵션과 마찬가지로 2개의 대시 --dir 이 필요하므로 이름이 변경되었습니다.

camel stop 명령은 기본적으로 모든 실행 중인 통합을 중지합니다( -all 옵션이 제거됨).

Placeholders 대체$name 구문 대신 #name 을 사용하도록 변경됩니다.

3.2.17.17. camel-openapi-java

io.apicurio.datamodels 대신 io.swagger.v3 라이브러리를 사용하도록 camel-openapi-java 구성 요소가 변경되었습니다. 그 결과 공개 메서드 org.apache.camel.openapi.RestOpenApi Cryostat.read()의 반환 유형은 이제 io.swagger.v3.oas.models.OpenAPI 대신 io.apicurio.datamodels.openapi.models.OasDocument 입니다. OpenAPI 2.0(swagger) 사양을 구문 분석하면 swagger 구문 분석기에 의해 OpenAPI 3.0.x로 자동 업그레이드됩니다. 이 버전은 OpenAPI 3.1.x 사양도 지원합니다.

3.2.17.18. Camel-optaplanner

camel-optaplanner 구성 요소는 Performver Manager를 사용하도록 변경되었습니다. Camel 3에서 SoverManager 를 사용하는 경우 더 이상 경로에 부울 useSolverManager가 필요하지 않습니다. 더 이상 사용되지 않는 ProblemFactChangeProblemChange 로 교체되었습니다.

새 URI 경로는 다음과 같습니다.

from("optaplanner:myProblemName")
  .to("...")

Optaplanner controlPlaneverManager는 다음 두 가지 방법으로 전달할 수 있습니다.

  • 예를 들면 #parameter
  • 헤더로

Quarkus에서 camel-optaplanner 를 실행할 때 Quarkus를 사용하여 QuarkusManager를 생성합니다.

기존 Camel Optaplanner 경로를 마이그레이션할 수 있으므로 Camel Optaplanner는 아래 코드에 표시된 XML 구성 파일을 제공하여 기존 경로에 대한 PerformverManager 생성을 처리할 수 있습니다.

Optaplanner Routes XML 구성 파일 제공

from("optaplanner:myProblemName?configFile=PATH/TO/CONFIG.FILE.xml")
  .to("...")

참고
solver Daemon 솔루션은 controlPlaneverManager를 사용하도록 마이그레이션해야 합니다.

3.2.17.19. camel-platform-http-vertx

경로 또는 소비자가 일시 중지되면 http 상태 503이 이제 404 대신 반환됩니다.

3.2.17.20. camel-salesforce

생성된 DTO의 Blob 필드의 속성 이름에는 더 이상 'Url'이 수정되어 있지 않습니다. 예를 들어 ContentVersionUrl 속성은 이제 ContentVersion 입니다.

3.2.17.21. camel-slack

슬랙 소비자의 기본 지연은 Slack에 의해 자주 제한되는 것을 방지하기 위해 0.5s에서 10s로 변경됩니다.

3.2.17.22. camel-micrometer-starter

이제 uri 태그는 동적 값이 있는 URI로 인해 생성되는 태그가 너무 많이 생성될 수 있으므로 동적 대신 정적입니다. 이 설정은 camel.metrics.uriTagDynamic=true 를 설정하여 다시 활성화할 수 있습니다.

3.2.17.23. camel-platform-http-starter

platform-http-starter 가 HTTP 서버를 직접 사용하기 위해 camel-servlet 을 사용하여 변경되었습니다. 따라서 모든 HTTP 끝점에 더 이상 서블릿 컨텍스트 경로(기본값은 camel)가 접두사가 지정되지 않습니다.

예를 들면 다음과 같습니다.

HTTP 끝점

from("platform-http:myservice")
  .to("...")

context-path가 사용되지 않으므로 끝점을 http://localhost:8080/myservice 로 호출할 수 있습니다.

참고

platform-http-starter 는 Rest DSL과 함께 사용할 수도 있습니다.

경로 또는 소비자가 일시 중지되면 http 상태 503이 이제 404 대신 반환됩니다.

3.2.17.24. Camel-twitter

camel-twitter 구성 요소는 Twitter4j 버전 4.1.2를 사용하도록 업데이트되었으며 일부 클래스에서 사용하는 패키지를 이동했습니다. Twitter 상태와 같은 특정 twitter 관련 데이터에 액세스하는 경우 twitter4j.Status 에서 사용되는 패키지를 twitter4j.v1.Status 로 업데이트해야 합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동