WebFlux系列WebClient VS RestTemplate

Posted JAVA微编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebFlux系列WebClient VS RestTemplate相关的知识,希望对你有一定的参考价值。

#Java#Spring#WebFlux#WebClient#RestTemplate#

WebClient和RestTemplate性能比较

视频讲解: https://www.bilibili.com/video/av82675791/

 

服务器端
WebfluxServerApplication.java
package com.example.webfluxserver;

import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@Log4j2
@SpringBootApplication
public class WebfluxServerApplication extends BaseApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebfluxServerApplication.class, args);
    }
    @RestController
    class EmployeeController {
        @GetMapping("employees")
        public List<Employee> findAll() throws InterruptedException {
            Thread.sleep(5000);
            return list;
        }
    }
}
客户端
WebfluxConsumerApplication.java
package com.example.webfluxconsumer;

import lombok.extern.log4j.Log4j2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Arrays;
import java.util.List;

@Log4j2
@SpringBootApplication
public class WebfluxConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebfluxConsumerApplication.class, args);
    }

    @RestController
    class EmployeeController {

        @GetMapping(value = "web", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
        public Flux<Employee> findWithWebClient() {
            long startTime = System.currentTimeMillis();
            Flux<Employee> employeeFlux = WebClient.create("http://localhost:8080/employees")
                    .get().retrieve().bodyToFlux(Employee.class);
            long endTime = System.currentTimeMillis();
            long duartion = endTime - startTime;
            log.info("webclient took times:{}", duartion);
            return employeeFlux;
        }


        @GetMapping("rest")
        public List<Employee> findWithRestTemplate() {
            long startTime = System.currentTimeMillis();
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<Employee[]> responseEntity = restTemplate
                    .getForEntity("http://localhost:8080/employees", Employee[].class);
            List<Employee> employeeList = Arrays.asList(responseEntity.getBody());
            long endTime = System.currentTimeMillis();
            long duartion = endTime - startTime;
            log.info("restTemplate took times:{}", duartion);
            return employeeList;
        }


    }
}

公众号,坚持每天3分钟视频学习

以上是关于WebFlux系列WebClient VS RestTemplate的主要内容,如果未能解决你的问题,请参考以下文章

WebFlux系列WebClient 异常处理

WebFlux系列WebClient Post传参

WebFlux系列WebClient Uri列表数组传参

WebFlux系列Server-Sent Events(续)

为啥 WebFlux-WebClient 超时不起作用?

如何从自定义 Webclient Builder 获取 webflux webClient 指标