Spring アプリケーションでリアクターに送信されたメッセージが失われているようです。これは、Spring コンテナーのライフサイクルでメッセージの生成を開始する時間が原因であると思われます。
私の特定のユースケースでは、起動時に初期化を実行する Spring Bean があります。この初期化の一部には、Reactor に送信されるメッセージの作成が含まれます。
Spring がコンシューマーを登録する順序に問題があり、コンシューマーが登録される前に初期化コードが実行されていると思われます。起動後にコードを手動で実行すると、たとえば、同じコードを呼び出すコントローラーにリクエストを送信すると、メッセージがコンシューマーに送信されます。
初期化コードが実行されるライフサイクルの時間を変更するさまざまな方法を試しました。たとえばApplicationListener<ContextRefreshedEvent>
、メソッドApplicationListener<ContextStartedEvent>
、@PostConstruct
実装InitializingBean
などです。これらのアプローチはどれも機能していないようです。
私のコンシューマーには @reactor.spring.annotation.Consumer のアノテーションが付けられ、@reactor.spring.annotation.Selector.Selector のメソッドにはアノテーションが付けられています。念のため、Spring Boot と自動構成された Reactor (@EnableReactor) を使用しています。