129.5. DeadEvent 注意事项
请记住,由于 Guava EventBus 的设计的限制,您无法指定监听器要接收的事件类,而无需创建使用 @Subscribe
方法标注的类。这个限制意味着,带有 eventClass
选项的端点实际上侦听所有可能的事件(java.lang.Object
),并在运行时以编程方式过滤适当的消息。以下 snipped 展示了 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 将通过您使用后者选项指定的接口创建动态代理,并仅侦听接口处理器方法指定的消息。下面演示了带有单一方法处理 SpecificEvent
实例的监听程序接口示例。
package com.example; public interface CustomListener { @Subscribe void eventReceived(SpecificEvent event); }
上述侦听器可以在端点定义中使用,如下所示:
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");