[英]Spring 5 - Chain reactive webclient calls
我正在尝试学习如何在 Spring 5 中使用反应式 WebClient。假设我需要拨打 3 个电话:
这里,调用2和3分别依赖于1的output,而3也依赖于2的output。
我知道我可以做类似的事情:
accessTokenService
.getAccessToken()
.flatMapMany(accountsService::getAccounts)
...
但是对flatMap
或doOnNext
(或其他任何东西)的任何后续调用都只能访问帐户,而不能访问访问令牌。
我认为我的问题归结为:
如果调用 2 依赖于调用 1 的 output,而调用 3 依赖于调用 1 和 2 的 output,是否有一种标准方法可以在不使用block()
的情况下完成此操作?
编辑澄清:调用 3 需要调用 1 的 output 作为输入,也需要调用 2 的 output 作为输入,例如:
accessTokenService
.getAccessToken() // Call 1
.flatMapMany((accessToken) -> accountsService.getAccounts(accessToken)) // Call 2
.flatMapMany((accessToken, accounts) -> transactionService.getTransactions(accessToken, accounts)) // Call 3
...
假设数据类Account
、 Token
和Transaction
,以及以下服务层结构:
interface AccessTokenService {
Mono<Token> getAccessToken();
}
interface AccountsService {
Flux<Account> getAccounts(Token token);
}
interface TransactionService {
Flux<Transaction> getTransactions(Token token, Flux<Account> account);
}
然后您可以通过这种方式在收到令牌后将所有帐户的所有交易汇总在一起:
Flux<Transaction> transactions = accessTokenService
.getAccessToken()
.flatMapMany(token -> {
final Flux<Account> accounts = accountsService.getAccounts(token);
return transactionService.getTransactions(token, accounts);
});
请注意,上面的所有调用都是非阻塞的。
接下来交易Flux
会发生什么留给你:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.