59.10. CDI 이벤트 끝점


Camel 2.17에서 사용 가능

CDI 이벤트 끝점은 Camel 경로와 CDI 이벤트를 브리지하여 Camel 소비자 (resp. by Camel 생산자의 경우)에서 CDI 이벤트를 원활하게 관찰/사용할 수 있도록 (resp. produced/run)할 수 있습니다.

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

@Inject
CdiEventEndpoint<String> cdiEventEndpoint;

from(cdiEventEndpoint).log("CDI event received: ${body}");
Copy to Clipboard Toggle word wrap

이는 다음과 같습니다.

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

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

from("direct:event").log("CDI event received: ${body}");
Copy to Clipboard Toggle word wrap

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

@Inject
CdiEventEndpoint<String> cdiEventEndpoint;

from("direct:event").to(cdiEventEndpoint).log("CDI event sent: ${body}");
Copy to Clipboard Toggle word wrap

이는 다음과 같습니다.

@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}");
Copy to Clipboard Toggle word wrap

또는 Java 8 lambda 표현식을 사용합니다.

@Inject
Event<String> event;

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

특정 CdiEventEndpoint< T > 삽입 지점의 유형 변수 T (resp.s)는 다음과 같이 매개변수화된 이벤트 유형(resp. into the  event type)으로 자동 변환됩니다.

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

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

void observeCdiEvents(@Observes @FooQualifier List<String> event) {
    logger.info("CDI event: {}", event);
}
Copy to Clipboard Toggle word wrap

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);
}
Copy to Clipboard Toggle word wrap

CDI 이벤트 Camel 엔드포인트는 이벤트 유형 및 이벤트 유형의 각각의 고유한 조합에 대한 관찰자 메서드 를 동적으로 추가하고 컨테이너 유형 안전 관찰자 확인 에만 의존하여 가능한 한 효율적으로 구현할 수 있습니다.

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

cdi-event://PayloadType<T1,...,Tn>[?qualifiers=QualifierType1[,...[,QualifierTypeN]...]]
Copy to Clipboard Toggle word wrap

기관 PayloadType (resp. the QualifierType)은 페이로드가 정규화된 페이로드(resp.ECDHE) 원시 유형인 URI인 경우, type 매개변수 섹션은 페이로드 매개 변수 유형에 대한 줄 바꿈으로 구분되어 있습니다. 예를 들어 다음과 같은 무명한 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
Copy to Clipboard Toggle word wrap

하지만 이로 인해 CDI 컨테이너가 배포 단계에서 Camel 컨텍스트 모델을 검색할 수 없기 때문에 끝점 인스턴스와 관찰자 방법 간의 효율적인 바인딩을 방지할 수 있습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat