60.5. 여러 Camel 컨텍스트
위에서 설명한 대로 모든 CamelContext
빈을 애플리케이션에 실제로 선언할 수 있습니다. 이 경우 이러한 CamelContext
빈에 선언된 CDI 한정자는 Camel 경로와 기타 Camel 프리미티브를 해당 Camel 컨텍스트에 바인딩하는 데 사용됩니다. 예를 들어 다음 빈이 선언된 경우 다음을 실행합니다.
@ApplicationScoped @ContextName("foo") class FooCamelContext extends DefaultCamelContext { } @ApplicationScoped @BarContextQualifier class BarCamelContext extends DefaultCamelContext { } @ContextName("foo") class RouteAddedToFooCamelContext extends RouteBuilder { @Override public void configure() { // ... } } @BarContextQualifier class RouteAddedToBarCamelContext extends RouteBuilder { @Override public void configure() { // ... } } @ContextName("baz") class RouteAddedToBazCamelContext extends RouteBuilder { @Override public void configure() { // ... } } @MyOtherQualifier class RouteNotAddedToAnyCamelContext extends RouteBuilder { @Override public void configure() { // ... } }
@ContextName
으로 인증된 RoutesBuilder
빈은 Camel CDI에서 해당 CamelContext
빈에 자동으로 추가됩니다. 이러한 CamelContext
빈이 없으면 RouteAddedToBazCamelContext
8080에 대해 자동으로 생성됩니다. 이는 Camel CDI에서 제공하는 @ContextName
한정자에서만 발생합니다. 따라서 사용자 정의 @MyOtherQualifier
한정자로 인증된 RouteNotAddedToAnyCamelContext
Quarkus는 Camel 컨텍스트에 추가되지 않습니다. 예를 들어 애플리케이션 실행 중에 나중에 추가해야 하는 Camel 경로에 유용할 수 있습니다.
Camel 버전 2.17.0부터 Camel CDI는 모든 종류의 CamelContext
빈(예: DefaultCamelContext
)을 관리할 수 있습니다. 이전 버전에서는 CdiCamelContext
유형의 빈만 관리할 수 있으므로 확장해야 합니다.
CamelContext
빈에 선언된 CDI 한정자도 해당 Camel 프리미티브를 바인딩하는 데 사용됩니다. 예를 들면 다음과 같습니다.
@Inject @ContextName("foo") @Uri("direct:inbound") ProducerTemplate producerTemplate; @Inject @ContextName("foo") @Uri("direct:inbound") FluentProducerTemplate fluentProducerTemplate; @Inject @BarContextQualifier MockEndpoint outbound; // URI defaults to the member name, i.e. mock:outbound @Inject @ContextName("baz") @Uri("direct:inbound") Endpoint endpoint;