Spring Boot響應式客戶端WebClient入門
WebClient是一個響應式客戶端,它提供了RestTemplate的替代方法。它公開了一個功能齊全、流暢的API,並依賴於非阻塞I / O,使其能夠比RestTemplate更高效地支援高併發性。WebClient非常適合流式的傳輸方案,並且依賴於較低階別的HTTP客戶端庫來執行請求,是可插拔的。
如果在你係統的類路徑上有Spring WebFlux,就可以選擇使用WebClient來呼叫遠端REST服務。相比之下RestTemplate,這個客戶端具有更多的函式感並且完全Reactive響應式的。您可以在Spring Framework文件WebClient的專用 部分中瞭解有關該內容的更多資訊。
WebClient使用與WebFlux伺服器應用程式相同的編解碼器,並與伺服器功能Web框架共享公共基本包,一些通用API和基礎結構。API公開了Reactor Flux和Mono型別。預設情況下,它使用Reactor Netty作為HTTP客戶端庫,但其他人可以透過自定義ClientHttpConnector插入。
與RestTemplate相比,WebClient是:
- 非阻塞,Reactive的,並支援更高的併發性和更少的硬體資源。
- 提供利用Java 8 lambdas的函式API。
- 支援同步和非同步方案。
- 支援從伺服器向上或向下流式傳輸。
RestTemplate不適合在非阻塞應用程式中使用,因此Spring WebFlux應用程式應始終使用WebClient。在大多數高併發場景中,WebClient也應該是Spring MVC中的首選,並且用於編寫一系列遠端,相互依賴的呼叫。
讓我們建立一個新Spring Boot專案,包含org.springframework.boot:spring-boot-starter-webflux,org.projectlombok:lombok。使用Maven:
spring init --dependencies=webflux,lombok --language=maven --build=gradle spring-boot-webclient
pom.xml主要依賴:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> </dependencies> |
在這個例子中,我們將使用RESTFul在這個專案中實現一個服務案例,這是一個Android應用案例,主要用於改善你的飲料食譜健康方面的app,下面主要是伺服器端方面,它將食譜和飲料暴露為API服務。
retrieve()方法
retrieve()方法是獲取響應內容並對其進行解碼的最簡單方法:
@Service public class BeverageServiceImpl implements BeverageService { private WebClient client = WebClient.create("http://jugoterapia.josdem.io/jugoterapia-server"); public Mono<Beverage> getBeverage(Long id){ return client.get() .uri("/beverages/{id}", id).accept(APPLICATION_JSON) .retrieve() .bodyToMono(Beverage.class); } } |
飲料服務介面:
public interface BeverageService { Mono<Beverage> getBeverage(Long id); }
現在讓我們建立一個簡單的POJO來從我們的API中檢索資訊。
@Data @AllArgsConstructor @NoArgsConstructor public class Beverage { private Long id; private String name; private String ingredients; private String recipe; } |
接下來,我們將CommandLineRunner用於啟動我們的工作流程。這CommandLineRunner是Spring Boot中的回撥介面,當Spring Boot啟動時會呼叫它並透過run()內部方法傳入args 。
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean CommandLineRunner run(BeverageService beverageService){ return args -> { beverageService.getBeverage(35) .subscribe(System.out::println); }; } } |
以上原始碼下載:此處
相關文章
- WebClient: Spring的新的HTTP反應式客戶端 - spring.ioWebclientSpringHTTP客戶端
- Spring Boot 2 (十):Spring Boot 中的響應式程式設計和 WebFlux 入門Spring Boot程式設計WebUX
- Spring Boot OAuth 2.0 客戶端Spring BootOAuth客戶端
- Spring Boot 中的響應式程式設計和 WebFlux 入門Spring Boot程式設計WebUX
- HTTP 客戶端:RestClient、WebClient、RestTemplateHTTP客戶端RESTclientWeb
- spring boot 獲取客戶端ip資訊Spring Boot客戶端
- Spring Cloud入門教程-Ribbon實現客戶端負載均衡SpringCloud客戶端負載
- Spring Boot 響應jspSpring BootJS
- Spring Boot入門Spring Boot
- CAS SSO單點登入客戶端環境搭建之Spring Cloud + Spring Boot 企業架構客戶端CloudSpring Boot架構
- Spring Cloud + Spring Boot 企業架構之CAS SSO單點登入客戶端環境搭建CloudSpring Boot架構客戶端
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- Spring Boot系列(一):Spring Boot 入門篇Spring Boot
- CAS SSO單點登入客戶端環境搭建解析之Spring Cloud + Spring Boot企業架構客戶端CloudSpring Boot架構
- Spring Cloud + Spring Boot + Mybatis 企業架構之CAS SSO單點登入客戶端環境搭建CloudSpring BootMyBatis架構客戶端
- Spring Boot HttpExchange 入門Spring BootHTTP
- Spring Boot Dubbo 入門Spring Boot
- spring boot快速入門Spring Boot
- Spring Boot入門(一):搭建Spring Boot專案Spring Boot
- Spring Cloud Config客戶端使用SpringCloud客戶端
- 響應式程式設計入門(RxJava)程式設計RxJava
- Spring boot入門(一):快速搭建Spring boot專案Spring Boot
- Spring Boot (一)快速入門Spring Boot
- Spring Boot 2.0.1 入門教程Spring Boot
- Spring Boot整合hessian入門Spring Boot
- Spring Boot的Kafka入門Spring BootKafka
- 前端入門6-JavaScript客戶端api&jQuery前端JavaScript客戶端APIjQuery
- 精講響應式webclient第1篇-響應式非阻塞IO與基礎用法Webclient
- Spring Cloud實戰系列(三) - 宣告式客戶端呼叫FeignSpringCloud客戶端
- Netty入門系列(1) --使用Netty搭建服務端和客戶端Netty服務端客戶端
- 分散式配置中心客戶端分散式客戶端
- Java Spring Cloud 與響應式微服務(三)客戶服務建立JavaSpringCloud微服務
- 響應式程式設計基礎教程:Spring Boot 與 Lettuce 整合程式設計Spring Boot
- Spring Boot 整合 Spring Security 入門案例教程Spring Boot
- Spring Boot 2和JPA入門Spring Boot
- Spring Boot 中使用 thrift 入門Spring Boot
- Spring Boot 中使用 grpc 入門Spring BootRPC
- spring系列—CAS客戶端與SpringSecurity整合Spring客戶端Gse