0

Spring Cloud Bus (1.2.1.RELEASE、Camden.SR2) を使用しています。CustomEvent私は作成して登録したカスタム イベント (と呼びます) と、イベントを公開するため@RemoteApplicationEventScanのカスタム実装を持っています。AbstractBusEndpointイベントをバスに問題なく発行できます。

リモート アプリケーションがイベントを受信して​​確認します (traceエンドポイントを使用してこれを確認しました)。で提供さCustomEventれている を介して が公開されていることをデバッグによって確認しました。リモート アプリケーションにイベント ハンドラーを持つ Bean があります (これはすべてのマイクロ サービスに自動構成されています)。ApplicationEventPublisherBusAutoConfiguration#acceptRemote

@Component
public class EventListener {

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

それにもかかわらず、イベント ハンドラーはイベントを受け取りません。クラス内をトレースしAbstractApplicationEventMulticaster、Bean が作成されている (エンドポイントを介して検証されている) にもかかわらず、リスナーがによって取得されbeansた のリストに含まれていません。このリストにはリスナーが表示されますが、カスタム リスナーは表示されません。ApplicationListenerListenerRetrieverBusAutoConfiguration.acceptLocal

このイベント ハンドラーは、ソース アプリケーション (イベントを開始するためにバス エンドポイントにアクセスしているアプリケーション) にも登録されています。カスタム リスナーは、このアプリケーションでイベントを受け取りますが、リモート アプリケーションでは受け取りません。

基本的に、両方のアプリケーションはまったく同じように構成されていますが、一方がCustomEventの実装を使用してを送信するように構成されていますAbstractBusEndpoint

この問題をデバッグするために、Spring コード内の他の場所を探す方法がわかりません。誰かが私を導くことができるスレッドを持っているなら、それはありがたいです.

4

1 に答える 1

0

まったく同じ問題が発生しました。それをデバッグすると、eventType が原因で ApplicationEventMulticaster 内の候補リスナー間で返されなかったカスタム リモート イベントを処理する ApplicationListener が 2 つの異なるクラスローダーによってロードされ、そのうちの 1 つは devtools 関連のクラスローダーであることが明らかになりました。クラスパスから devtools の依存関係を削除すると、問題が解決されました。

于 2018-07-18T12:20:26.043 に答える