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");
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.