我正在使用 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 代码中还有什么地方可以调试这个问题。如果有人有一个线程,他们可以引导我,将不胜感激。