7장. Karaf 독립 실행형에서 Fuse 애플리케이션 업그레이드
Karaf에서 Fuse 애플리케이션을 업그레이드하려면 다음을 수행합니다.
- 7.1절. “Camel 마이그레이션 고려 사항” 에 설명된 대로 Apache Camel 업데이트를 고려해야 합니다.
- 올바른 Fuse 버전을 사용하고 있는지 확인하려면 Fuse 프로젝트의 Maven 종속성을 업데이트해야 합니다.
일반적으로 Maven을 사용하여 Fuse 애플리케이션을 빌드합니다. Maven은 Apache의 무료 오픈 소스 빌드 툴입니다. Maven 구성은 Fuse 애플리케이션 프로젝트의 pom.xml
파일에 정의되어 있습니다. Fuse 프로젝트를 빌드하는 동안 기본 동작은 Maven이 외부 리포지토리를 검색하고 필요한 아티팩트를 다운로드하는 것입니다. Maven 빌드 프로세스에서 올바른 Fuse 지원 아티팩트 세트를 선택할 수 있도록BOM(Fuse of material)에 대한 종속성을 pom.xml
파일에 추가합니다.
다음 섹션에서는 Maven 종속 항목에 대한 정보와 Fuse 프로젝트에서 업데이트하는 방법을 설명합니다.
7.1. Camel 마이그레이션 고려 사항
MongoClients 팩토리를 사용하여 MongoDB에 연결 생성
Fuse 7.12에서 com.mongodb.MongoClient
대신 com.mongodb.client.MongoClient
를 사용하여 MongoDB에 대한 연결을 만듭니다(전체 경로에 추가 .client 하위 패키지 참조).
기존 Fuse 애플리케이션이 camel-mongodb
구성 요소를 사용하는 경우 다음을 수행해야 합니다.
애플리케이션을 업데이트하여 연결 빈을
com.mongodb.client.MongoClient
인스턴스로 만듭니다.예를 들어 다음과 같이 MongoDB에 대한 연결을 생성합니다.
import com.mongodb.client.MongoClient;
그런 다음 다음 예와 같이 MongoClient 8080을 생성할 수 있습니다.
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 소비자는 이제 파일이 in-process로 간주될 때 릴리스 작업을 지연하도록 구성할 수 있습니다. 이 파일은 프로세스 내/활성 클러스터 설정에서 사용 가능하며, 다른 노드에서 처리된 파일을 처리할 수 있는 파일로 너무 빠르게 표시되지 않도록 합니다(RemoveOnCommit=true).
- 요청/응답 모드에서 Netty4 프로듀서에서 사용자 정의 요청/일반 상관 ID 관리자 구현을 플러그인할 수 있습니다. 이제 Twitter 구성 요소에서 확장 모드를 사용하여 140자를 초과한 event를 지원합니다.
- 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입니다.
다음과 같은 중요한 문제가 해결되었습니다.
- CXF 연속 시간제한 문제가 camel-cxf 소비자와 관련된 수정으로 인해 소비자가 시간 초과를 트리거하는 대신 데이터가 포함된 응답을 반환하도록 할 수 있습니다.
- 고정 camel-cxf 소비자는 강력한 단방향 작업을 사용할 때 UoW를 릴리스하지 않습니다.
- AdviceWith를 사용하여 수정되었으며 onException에서 weave 메서드를 사용하는 경우 작동하지 않습니다.
- 병렬 처리 및 스트리밍 모드에서 고정 Splitter는 메시지 본문을 차단하는 동안 처음으로 호출된 next() 메서드 호출에서 예외를 발생시킬 때 차단될 수 있습니다.
- autoCommitEnable=false인 경우 Kafka 소비자가 자동 커밋되지 않도록 수정했습니다.
- 고정 파일 소비자는 기본적으로 markerFile을 읽기 잠금으로 사용했으며 이는 none이어야 했습니다.
- Kafka와의 수동 커밋을 사용하여 이전 레코드 오프셋이 아닌 현재 레코드 오프셋을 제공합니다(및 먼저 -1).
- Java DSL의 고정 콘텐츠 기반 라우터는 서술자가 있는 경우 속성 자리 표시자를 확인하지 않을 수 있습니다.
Camel 2.23 업데이트
- Spring Boot 2.1으로 업그레이드했습니다.
- 이제 Spring-boot 자동 구성을 사용하여 추가 구성 요소 수준 옵션을 구성할 수 있습니다. 이러한 옵션은 Spring-boot 구성 요소 메타데이터 JSON 파일 설명자에 포함되어 있습니다.
- 모든 구성 요소, 데이터 형식 및 언어에 대한 모든 Spring Boot 자동 구성 옵션이 포함된 문서 섹션을 추가했습니다.
-
모든 Camel Spring Boot Starter JAR에는 Spring Boot 자동 구성을 최적화하기 위해 JAR에
META-INF/spring-autoconfigure-metadata.properties
파일이 포함되어 있습니다. - Throttler는 동적 표현식을 기반으로 한 상관관계 그룹을 지원하여 다양한 제한 세트로 메시지를 그룹화할 수 있습니다.
- Hystrix EIP는 이제 Camel의 오류 처리기에 대한 상속을 허용하므로 재전송을 통해 오류 처리를 활성화한 경우 전체 Hystrix EIP 블록을 다시 시도할 수 있습니다.
- SQL 및 ElSql 소비자는 이제 경로 양식에서 동적 쿼리 매개변수를 지원합니다. 이 기능은 간단한 표현식을 사용하여 빈을 호출하도록 제한됩니다.
- swagger-restdsl maven 플러그인은 이제 Swagger 사양 파일에서 DTO 모델 클래스 생성을 지원합니다.
다음과 같은 중요한 문제가 해결되었습니다.
- Aggregator2는 모든 그룹의 강제 완료를 위해 제어 헤더를 전파하지 않도록 수정되었으므로 라우팅 중에 다른 집계기 EIP가 나중에 사용 중인 경우 다시 발생하지 않습니다.
- 오류 처리기에서 재전송이 실행된 경우 고정 추적기가 작동하지 않습니다.
- XML 문서에 대한 기본 제공 유형 변환기는 구문 분석 오류를 stdout에 출력할 수 있으며 로깅 API를 사용하여 출력하도록 수정되었습니다.
- 메시지 본문이 스트리밍 기반인 경우 charset 옵션을 사용하여 파일을 작성하여 파일을 작성하는 것이 작동하지 않습니다.
- 여러 경로를 통해 라우팅할 때 재사용되지 않도록 Zipkin 루트 ID를 수정하여 단일 상위 범위로 그룹화합니다.
- HTTP 끝점을 사용할 때 숫자가 있는 IP 주소가 포함된 경우 버그가 있었습니다.
- 임시 대기열을 통해 요청/거부하고 수동 승인 모드를 사용하는 RabbitMQ의 문제를 해결했습니다. 임시 큐(요청/응답 가능)를 인식하지 못합니다.
- Allow 헤더 for OPTIONS 요청(예: rest-dsl 사용 시)에서 허용되는 모든 HTTP 동사를 반환하지 않을 수 있는 다양한 HTTP 소비자 구성 요소가 수정되었습니다.
- FluentProducerTemplate에서 thread- Cryostat 문제를 해결했습니다.