60.10. CDI 이벤트 끝점


Camel 2.17 사용 가능

CDI 이벤트 끝점은 Camel 경로와 CDI 이벤트를 연결하여 Camel 소비자(예: Camel 생산자가)에서 CDI 이벤트를 원활하게 / 소비(resp. produced / fired)할 수 있도록 합니다.

Camel CDI에서 제공하는 CdiEventEndpoint<T > Quarkus를 사용하여 이벤트 유형이 T 인 CDI 이벤트를 관찰/사용할 수 있습니다. 예를 들면 다음과 같습니다.

@Inject
CdiEventEndpoint<String> cdiEventEndpoint;

from(cdiEventEndpoint).log("CDI event received: ${body}");

이는 쓰기와 동일합니다.

@Inject
@Uri("direct:event")
ProducerTemplate producer;

void observeCdiEvents(@Observes String event) {
    producer.sendBody(event);
}

from("direct:event").log("CDI event received: ${body}");

반대로 CdiEventEndpoint<T > scaling을 사용하여 이벤트 유형이 T 인 / fire CDI 이벤트를 생성할 수 있습니다. 예를 들면 다음과 같습니다.

@Inject
CdiEventEndpoint<String> cdiEventEndpoint;

from("direct:event").to(cdiEventEndpoint).log("CDI event sent: ${body}");

이는 쓰기와 동일합니다.

@Inject
Event<String> event;

from("direct:event").process(new Processor() {
    @Override
    public void process(Exchange exchange) {
        event.fire(exchange.getBody(String.class));
    }
}).log("CDI event sent: ${body}");

또는 Java 8 람다 식을 사용합니다.

@Inject
Event<String> event;

from("direct:event")
    .process(exchange -> event.fire(exchange.getIn().getBody(String.class)))
    .log("CDI event sent: ${body}");

특정 CdiEventEndpoint< T > 주입 지점의 유형 변수 T (resp.)는 매개 변수가 있는 이벤트 유형 (resp. into the event qualifiers)으로 자동 변환됩니다.

@Inject
@FooQualifier
CdiEventEndpoint<List<String>> cdiEventEndpoint;

from("direct:event").to(cdiEventEndpoint);

void observeCdiEvents(@Observes @FooQualifier List<String> event) {
    logger.info("CDI event: {}", event);
}

CDI 컨테이너에 Camel 컨텍스트가 여러 개인 경우 @ContextName 과 같은 Camel 컨텍스트 빈 한정자를 사용하여 CdiEventEndpoint<T > 주입 지점을 확인할 수 있습니다. 예를 들면 다음과 같습니다.

@Inject
@ContextName("foo")
CdiEventEndpoint<List<String>> cdiEventEndpoint;
// Only observes / consumes events having the @ContextName("foo") qualifier
from(cdiEventEndpoint).log("Camel context (foo) > CDI event received: ${body}");
// Produces / fires events with the @ContextName("foo") qualifier
from("...").to(cdiEventEndpoint);

void observeCdiEvents(@Observes @ContextName("foo") List<String> event) {
    logger.info("Camel context (foo) > CDI event: {}", event);
}

CDI 이벤트 Camel 끝점은 이벤트 유형 및 이벤트 한정자 의 각각의 고유한 조합에 대한 관찰자 방법을 동적으로 추가하고 컨테이너 유형 안전 관찰자 확인 에만 의존하여 최대한 효율적으로 구현할 수 있습니다.

또한 CDI의 유형 안전 특성과 Camel 구성 요소 모델의 동적 특성 간의 방해가 매우 높기 때문에 URI 를 통해 CDI 이벤트 Camel 끝점 인스턴스를 생성할 수 없습니다. 실제로 CDI 이벤트 구성 요소의 URI 형식은 다음과 같습니다.

cdi-event://PayloadType<T1,...,Tn>[?qualifiers=QualifierType1[,...[,QualifierTypeN]...]]

authority PayloadType (resp. the QualifierType)을 사용하여 페이로드 (resp. qualifier) 원시 유형의 URI 이스케이프된 정규화된 이름과 페이로드 매개 변수 형식으로 구분된 유형 매개 변수 섹션이 페이로드 매개 변수 형식으로 구분됩니다. 다음과 같이 불충분한 URI로 이어집니다.

cdi-event://org.apache.camel.cdi.example.EventPayload%3Cjava.lang.Integer%3E?qualifiers=org.apache.camel.cdi.example.FooQualifier%2Corg.apache.camel.cdi.example.BarQualifier

그러나 CDI 컨테이너에 배포 단계에서 Camel 컨텍스트 모델을 검색할 방법이 없기 때문에 엔드포인트 인스턴스와 관찰자 방법 간의 효율적인 바인딩을 방지할 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.