React器和Spring状态机依次执行Mono和Flux

e4yzc0pl  于 2023-02-28  发布在  Spring
关注(0)|答案(1)|浏览(235)

我有以下方法,调用该方法时,该方法没有返回值,但从另一个返回Mono的服务metadataService获取对象,然后对Mono返回的对象进行一些处理,完成后,我需要向StateMachine发送信号,以便可以触发下一步。

public void safeExecute(
             StateContext<StateMachineStates, StateMachineEvents> context){
        metadataService.getMetadata(context.getId())
            .doOnSuccess(metadata ->{
              // perform some operation here

              context.getStateMachine()
             // returns a Flux<StateMachineEventResult<S, E>>   
             .sendEvent(Mono.just(
                  MessageBuilder.withPayload(Events.E_GOTO_NEXT_STATE).build()
                 ))
              .subscribe()
            })
           .
        }

但我得到警告:
Calling 'subscribe' in non-blocking context is not recommended
我显然可以通过调用publishOn(Schedulers.boundedElastic())来解决这个问题,但是警告仍然存在。
我的问题是如何在onSuccess中的代码块完成后才将事件发送到StateMachine?我尝试使用concatWithdoFinally,但我对React式编程没有足够好的理解。
我的当前堆栈:

  • Spring Boot 3.0.1
  • Spring状态机3.0.1
  • Spring 6
iqxoj9l9

iqxoj9l91#

我不认为你应该在这里使用订阅,你的目标是发送消息的单声道,你需要在某个地方接收这个消息作为你消息的单声道,然后你会使用它的内容。

monoMessage.map(message -> doSomethingWithYourMessage(message))

相关问题