WebFlux系列(六)WebClient VS RestTemplate

sdaq 2020-01-09

#Java#Spring#WebFlux#WebClient#RestTemplate#

WebClient和RestTemplate性能比较

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

WebFlux系列(六)WebClient VS RestTemplate

服务器端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

相关推荐