【发布时间】:2020-04-30 14:20:36
【问题描述】:
我是 spring webflux 的新手,正在尝试对两个单声道的值执行一些算术运算。我有一个产品服务,它通过 webClient 调用帐户服务来检索帐户信息。我想确定账户的当前余额是否大于或等于产品的价格。
Mono<Account> account = webClientBuilder.build().get().uri("http://account-service/user/accounts/{userId}/",userId)
.retrieve().bodyToMono(Account.class);
//productId is a path variable on method
Mono<Product> product =this.productService.findById(productId);
当我尝试阻止流时出现错误
block()/blockFirst()/blockLast()是阻塞的,线程reactor-http-nio-2不支持
//Causes Error
Double accountBalance = account.map(a->a.getBalance()).block():
Double productPrice = product.map(p->p.getPrice()).block();
///Find difference, send response accordingly....
这是正确的方法吗?还有另一种更好的方法来实现这一目标吗?我也在想一些事情:
Mono<Double> accountBalance = account.map(a->a.getBalance()):
Mono<Double> productPrice = product.map(p->p.getPrice());
Mono<Double> res = accountBalance.zipWith(productPrice,(b,p)-> b-p);
//Something after this.....
【问题讨论】:
标签: spring-boot reactive-programming spring-webflux