我有以下方法,调用该方法时,该方法没有返回值,但从另一个返回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?我尝试使用concatWith
或doFinally
,但我对React式编程没有足够好的理解。
我的当前堆栈:
- Spring Boot 3.0.1
- Spring状态机3.0.1
- Spring 6
1条答案
按热度按时间iqxoj9l91#
我不认为你应该在这里使用订阅,你的目标是发送消息的单声道,你需要在某个地方接收这个消息作为你消息的单声道,然后你会使用它的内容。