我有一个无功/异步调用的场景。我正在使用sping-boot-starter-webflow
并使用webClient
进行外部HTTP调用。我的场景是,我必须打电话给call A(),然后检查它的响应响应。如果它的响应是确定比退出并返回响应。否则,创建第二个请求请求B使用响应A和打一个调用到calB()。然后检查其响应响应。如果它是确定的,然后返回响应,否则doRetry on call A()。
public Mono<ResponseA> callA(Request1 requestA) {
// calling service-A using webclient
}
public Flux<ResponseB> callB(Request2 requestB) {
// calling service-B using webclient but to create requestB, I need ResponseA.
}
您只需要在平面图中执行一些if语句。可能会将其拆分为一些更好的函数名等。不订阅,不阻塞。
callA(createNewRequest()).flatMap(response1 -> {
// Validate response
if(!isValidResponse(response)) {
// if failed validation, create new request and do a new call
var request = buildRequest(response);
return callB(request).flatMap(response2 -> {
// validate second response
if(!isValidResponse(response2)) {
// failed validation return the first response.
return Mono.just(response1)
}
// otherwise recursively call again
return callA(createNewRequest()); // Warning this can be an infinite loop
}
}
// Validation passed
return Mono.just(response);
}
我有一个应该向用户发送电子邮件的用例。首先,我创建电子邮件正文。 然后我选择用户并向他们发送电子邮件: 我不喜欢什么 没有cache()方法,emailBody Mono会在每个迭代步骤中进行计算 要获得emailBody值,我使用emailBody。block(),但可能有一种反应方式,而不是在通量流中调用block方法
我写了一个@Aspect来拦截以Mono/Flux返回值的被动方法。使用@AfterReturning advice,我试图通过调用webservice发出APNS通知。 不幸的是,processNotification Mono服务在没有执行调用链的情况下立即返回onComplete信号。下面是我的示例程序。 我们如何在不等待侦听的情况下异步触发此调用。。目前,processNotificati
更新: 一点我想要实现的内容。我有两个服务--一个通过Http返回me,另一个通过Redis返回。对于这两种情况,我有完全相同的功能-10-15个操作符链,我想要实现的是避免重复代码。 例如:
如何将flux 转换为mono 对象?
我是Reactor编程新手,需要MONO/Flux方面的帮助 我有POJO课程 受雇者Java语言 我在访问服务时返回了Mono,我需要从Mono中提取名称作为字符串。 但这再次返回Mono而不是字符串。我需要从这个Mono中提取String值。
下一个metod在TokenService类中。