天天看點

WebClientd的Block和SubscribeJava代碼控制台輸出結論

探究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

WebClientd的Block和SubscribeJava代碼控制台輸出結論

Block call 有return

WebClientd的Block和SubscribeJava代碼控制台輸出結論

Subscribe call 無return

WebClientd的Block和SubscribeJava代碼控制台輸出結論

Subscribe call 有return

WebClientd的Block和SubscribeJava代碼控制台輸出結論

結論

Block同步,subscribe異步。與call的服務有沒有return無關