0

我正在使用 Spring Cloud Bus(1.2.1.RELEASE,Camden.SR2)。CustomEvent我有一个创建和注册的自定义事件(调用它)@RemoteApplicationEventScan以及一个自定义AbstractBusEndpoint实现来发布事件。我能够将事件发布到总线就好了。

我的远程应用程序接收到事件并确认(我使用trace端点验证了这一点)。我已经通过调试验证了是CustomEvent通过ApplicationEventPublisher. BusAutoConfiguration#acceptRemote我的远程应用程序中有一个带有事件处理程序的 bean(我已将其自动配置到我的所有微服务中):

@Component
public class EventListener {

  @EventHandler(CustomEvent.class)
  public void handleCustomEvent(CustomEvent event) {
    ..
  }
}

尽管如此,事件处理程序将不会接收到该事件。我在AbstractApplicationEventMulticaster类中进行了跟踪,尽管创建了我的 bean(通过beans端点验证),但侦听器不在ApplicationListeners 检索的列表中ListenerRetriever。我确实BusAutoConfiguration.acceptLocal在此列表中看到了侦听器,但没有看到我的自定义侦听器。

此事件处理程序也在源应用程序上注册(我从中访问总线端点以启动事件的应用程序)。自定义侦听器接收此应用程序中的事件,但不接收远程应用程序。

本质上,这两个应用程序的配置完全相同,除了一个配置为CustomEvent使用AbstractBusEndpoint.

我不知道在 Spring 代码中还有什么地方可以调试这个问题。如果有人有一个线程,他们可以引导我,将不胜感激。

4

1 回答 1

0

我遇到了完全相同的问题,调试它显示 ApplicationListener 处理由于 eventType 而未在 ApplicationEventMulticaster 内的候选侦听器之间返回的自定义远程事件是由两个不同的类加载器加载的,其中一个是与 devtools 相关的类加载器。从类路径中删除 devtools 依赖项只是为我解决了问题。

于 2018-07-18T12:20:26.043 回答