WebClientd的Block和Subscribe

本文通过Java代码示例展示了WebClient在调用服务时,使用block和subscribe方法的区别。block是同步调用,会阻塞直到服务完成;而subscribe是异步调用,不会等待服务完成。实验结果显示,服务是否有返回值并不影响这一行为,block始终同步,subscribe始终异步。
摘要由CSDN通过智能技术生成

探究WebClient的block和subscribe call有无return的服务的区别

Java代码

Server

Server1

@RequestMapping("/server1")
    public void server1(){
        for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("server1 is executing");
        }
        log.info("server1 is done");
    }

Server2

 @RequestMapping("/server2")
    public String server2(){
        for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("server2 is executing");
        }
        log.info("server2 is done");
        return "server2's return";
    }

Client

client1

@RequestMapping("/client1")
    public void client1() {
        log.info("block call 无return");
        Void block = webClient.get().uri("/server1").retrieve().bodyToMono(Void.class).block();
        log.info("client1 finished");
    }

client2

 @RequestMapping("/client2")
    public void client2() {
        log.info("block call 有return");
        String block = webClient.get().uri("/server2").retrieve().bodyToMono(String.class).block();
        log.info("client2 finished");
    }

client3

@RequestMapping("/client3")
    public void client3() {
        log.info("subscribe call 无return");
        Disposable subscribe = webClient.get().uri("/server1").retrieve().bodyToMono(Void.class).subscribe();
        log.info("client3 finished");
    }

client4

@RequestMapping("/client4")
    public void client4() {
        log.info("subscribe call 有return");
        Disposable subscribe = webClient.get().uri("/server2").retrieve().bodyToMono(String.class).subscribe();
        log.info("client4 finished");
    }

控制台输出

Block call 无return

在这里插入图片描述

Block call 有return

在这里插入图片描述

Subscribe call 无return

在这里插入图片描述

Subscribe call 有return

在这里插入图片描述

结论

Block同步,subscribe异步。与call的服务有没有return无关

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skye111321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值