129.5. DeadEvent 고려 사항
Guava EventBus의 설계로 인한 제한 사항으로 인해 @Subscribe
메서드 주석이 추가된 클래스를 생성하지 않고도 리스너에서 수신하도록 이벤트 클래스를 지정할 수 없습니다. 이 제한은 eventClass
옵션이 지정된 끝점이 실제로 모든 가능한 이벤트(java.lang.Object
)를 수신 대기하고 런타임 시 프로그래밍 방식으로 적절한 메시지를 필터링한다는 것을 의미합니다. 아래 요약은 Camel 코드 베이스에서 적절한 발췌를 보여줍니다.
@Subscribe public void eventReceived(Object event) { if (eventClass == null || eventClass.isAssignableFrom(event.getClass())) { doEventReceived(event); ...
이 접근 방식의 단점은 Camel에서 사용하는 EventBus
인스턴스가 com.google.common.eventbus.DeadEvent
알림을 생성하지 않는다는 것입니다. Camel이 정확히 지정된 이벤트만 수신 대기하고 DeadEvent
지원을 활성화하려면 listenerInterface
엔드포인트 옵션을 사용합니다. Camel은 후자 옵션으로 지정하는 인터페이스를 통해 동적 프록시를 생성하고 인터페이스 처리기 메서드에서 지정한 메시지만 수신합니다. 특정
인스턴스만 처리하는 단일 메서드를 사용하는 리스너 인터페이스의 예는 다음과 같습니다.
package com.example; public interface CustomListener { @Subscribe void eventReceived(SpecificEvent event); }
위에 표시된 리스너는 다음과 같이 끝점 정의에서 사용할 수 있습니다.
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");