59.11. Camel XML 구성 가져오기

Camel 2.18에서 사용 가능

CDI는 형식이 안전한 종속성 주입 메커니즘을 선호하지만 기존 Camel XML 구성 파일을 Camel CDI 애플리케이션으로 재사용하는 것이 유용할 수 있습니다. 다른 사용 사례에서는 Camel XML DSL을 사용하여 Camel 컨텍스트를 구성하는 것이 편리할 수 있습니다.

CDI 빈에서 Camel CDI가 제공하는 @ImportResource 주석을 사용할 수 있으며 Camel CDI는 다음과 같이 지정된 위치에 Camel XML 구성을 자동으로 로드합니다.

@ImportResource("camel-context.xml")
class MyBean {
}

Camel CDI는 classpath에서 지정된 위치에 리소스를 로드합니다(다른 프로토콜도 나중에 추가할 수 있음).

가져온 리소스의 모든 CamelContext 요소 및 기타 Camel 프리미티브 는 컨테이너 부트스트랩 중에 CDI 빈으로 자동 배포되므로 Camel CDI에서 제공하는 자동 구성을 활용하고 런타임에 주입할 수 있습니다. 이러한 요소에 명시적 id 속성이 설정된 경우 다음 Camel XML 구성이 제공됨과 같이 @Named 한정자를 사용하여 해당 CDI 빈이 정규화됩니다.

<camelContext id="foo">
    <endpoint id="bar" uri="seda:inbound">
        <property key="queue" value="#queue"/>
        <property key="concurrentConsumers" value="10"/>
    </endpoint>
<camelContext/>

해당 CDI 빈은 자동으로 배포되며 다음과 같이 삽입할 수 있습니다.

@Inject
@ContextName("foo")
CamelContext context;

@Inject
@Named("bar")
Endpoint endpoint;

CamelContext 빈은 @Named 및 @ContextName 한정자를 모두 사용하여 자동으로 정규화됩니다. 가져온 CamelContext 요소에 id 속성이 없는 경우 해당 빈은 기본 제공 @Default 한정자와 함께 배포됩니다.

반대로 애플리케이션에 배포된 CDI 빈은 일반적으로 ref 특성(예: 다음 빈이 선언된 경우) Camel XML 구성에서 참조할 수 있습니다.

@Produces
@Named("baz")
Processor processor = exchange -> exchange.getIn().setHeader("qux", "quux");

가져온 Camel XML 구성에서 해당 빈에 대한 참조를 선언할 수 있습니다. 예를 들면 다음과 같습니다.

<camelContext id="foo">
    <route>
        <from uri="..."/>
        <process ref="baz"/>
    </route>
<camelContext/>