当前位置: 首页 > 知识库问答 >
问题:

Spring webClient:同时进行多个请求

苏建安
2023-03-14

是否可以在webclient上将多个请求链接在一起?例如,我希望在进行交易时能够更新买方和卖方的余额。现在它只更新买家余额:


    public Mono<Void> isAccountBalanceGreater(Account acc, Product prd) {


       double newBuyerBalance  =acc.getBalance() - prd.getPrice();

       Mono<Account> seller =  webClientBuilder.build().get().uri("http://account-service/user/accounts/{userId}/", prd.getProductId())
    .retrieve().bodyToMono(Account.class)
    .map(a-> new Account(a.getAccountId(),a.getOwner(),a.getPin(),a.getBalance()+prd.getPrice(),a.getUserId()));

    Account newOwnerAcc = new Account(acc.getAccountId(),acc.getOwner(),acc.getPin(),newBuyerBalance,acc.getUserId());


return webClientBuilder.build().put()
.uri("http://account-service/account/update/{accountId}",acc.getAccountId())
.body(Mono.just(newOwnerAcc),Account.class)
.retrieve().bodyToMono(Void.class);





        }

是否有一种方法可以将两个put方法调用在一起,以便更新两个余额?

更新:此方法适用于将单声道值作为uri变量调用。

    return acc.flatMap(a->{


               UriComponents urlc = UriComponentsBuilder.fromUriString("http://account-service/account/update/{accountId}")
                       .encode().build();

               URI uri = urlc.expand(a.getAccountId()).toUri();

                return webClientBuilder.build().put()
                         .uri(uri)
                             .body(acc,Account.class).retrieve().bodyToMono(Void.class);
            });


共有1个答案

荆学民
2023-03-14

为了简化,我将提取webclient调用以分离方法:

Mono<Void> webClientCall(Account acc) {
 return webClientBuilder.build().put()
    .uri("http://account-service/account/update/{accountId}",acc.getAccountId())
    .body(Mono.just(newOwnerAcc),Account.class)
    .retrieve().bodyToMono(Void.class);
}

假设您必须使用帐户,您可以使用邮政编码和运算符:

Account acc1;
Account acc2; 

return webClientCall(acc1).zipWith(webClientCall(acc2))
         .then();

 类似资料:
  • 我必须使用WebClient进行分页API调用,并最终组合所有结果。例如:个人最新1000交易详情。在一次调用中,我将在json响应(List)中获得最大100个对象。这个人最多只能得到1000条记录。 在伪代码java中,它可能看起来像这样 如何在SpringMVC中以反应式方式编写相同的内容而不阻塞? 像这样的东西???我不知道。帮助我

  • 问题内容: 我有24个数据库,其中的表标记为。 我有另一个数据库,其中包含该表的所有数据库的列表。 我遍历数据库列表并查询我的表以为每个数据库发送邮件。 这个问题是,PHP脚本被搁置了,比方说,第3个数据库,同时发送500封电子邮件,然后离开其他数据库等待轮到他们。 我试图弄清楚如何同时查询所有24个数据库并同时发送电子邮件队列。 有什么建议? 问题答案: 使用curl_multi_open可以做

  • 这是在收到以db为单位的帖子列表后发送带有每个帖子链接数据的POST请求的代码。 在使用每个链接请求帖子后,从回复中提取playerCount并将其更新到每个帖子。 我在这段代码中使用Resttemplate,但有一个问题需要花费太长时间。 所以我想把这个代码改为一次发送一个请求,并在所有请求完成后更新每个帖子。 我怎样才能把这个代码转换成我想要的? 我将使用此代码作为计划任务。

  • 我对在PHP中一次提交多个请求持怀疑态度。我有一个php函数,比如insertOrder()来将详细信息插入数据库表并向用户发送通知。详细信息将从另一个来源自动发布到此功能。这些是insertOrder()中的步骤 启动Mysql事务 从OrderID=123的数据库表中选择订单计数(来自post数据) 如果COUNT=0,则插入数据库表并发送通知 如果不是0,则更新顺序 提交 问题在于,有时系统

  • 本文向大家介绍多个js毫秒倒计时同时进行效果,包括了多个js毫秒倒计时同时进行效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲解js毫秒倒计时同时进行效果的代码,分享给大家供大家参考,具体内容如下 实现功能:调用一个函数,传入html元素的id,和一个截止时间(unix时间戳),在该html元素中打印出到当前到截止时间为止的倒计时,精确到毫秒; 效果图如下: 如何使用这个函数? addTi

  • 问题内容: 我正在遍历几个项目,并为每个项目提出ajax请求(使用jQuery)。我希望它们独立执行,但要以它们被调用的顺序而不是它们返回的顺序填充到DOM中(由于某些原因,某些请求比其他请求花费的时间更长)。有关此类事情的最佳做法的任何技巧? 问题答案: 最终的答案是一个名为ajaxManager的jQuery插件。这正是我需要的: https://github.com/aFarkas/Ajax