Spring Boot响应式客户端WebClient入门

栏目: Java · 发布时间: 6年前

内容简介:WebClient是一个响应式客户端,它提供了RestTemplate的替代方法。它公开了一个功能齐全、流畅的API,并依赖于非阻塞I / O,使其能够比RestTemplate更高效地支持高并发性。如果在你系统的类路径上有Spring WebFlux,就可以选择使用WebClient来调用远程REST服务。相比之下RestTemplate,这个客户端具有更多的函数感并且完全Reactive响应式的。您可以WebClient使用与WebFlux服务器应用程序相同的编解码器,并与服务器功能Web框架共享公共

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><b>true</b></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
<b>public</b> <b>class</b> BeverageServiceImpl implements BeverageService {

  <b>private</b> WebClient client = WebClient.create(<font>"http://jugoterapia.josdem.io/jugoterapia-server"</font><font>);

  <b>public</b> Mono<Beverage> getBeverage(Long id){
    <b>return</b> client.get()
      .uri(</font><font>"/beverages/{id}"</font><font>, id).accept(APPLICATION_JSON)
      .retrieve()
      .bodyToMono(Beverage.<b>class</b>);
  }

}
</font>

饮料服务接口:

public interface BeverageService { Mono<Beverage> getBeverage(Long id); }

现在让我们创建一个简单的POJO来从我们的API中检索信息。

@Data
@AllArgsConstructor
@NoArgsConstructor
<b>public</b> <b>class</b> Beverage {

  <b>private</b> Long id;
  <b>private</b> String name;
  <b>private</b> String ingredients;
  <b>private</b> String recipe;

}

接下来,我们将CommandLineRunner用于启动我们的工作流程。这CommandLineRunner是Spring Boot中的回调接口,当Spring Boot启动时会调用它并通过run()内部方法传入args 。

@SpringBootApplication
<b>public</b> <b>class</b> DemoApplication {

  <b>public</b> <b>static</b> <b>void</b> main(String[] args) {
    SpringApplication.run(DemoApplication.<b>class</b>, args);
  }

  @Bean
  CommandLineRunner run(BeverageService beverageService){
    <b>return</b> args -> {
      beverageService.getBeverage(35)
      .subscribe(System.out::println);
    };
  }

}

以上源码下载: 此处


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解密码技术(第3版)

图解密码技术(第3版)

[日] 结城浩 / 周自恒 / 人民邮电出版社 / 2016-6 / 89.00元

本书以图配文的形式,详细讲解了6种最重要的密码技术:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。 第1部分讲述了密码技术的历史沿革、对称密码、分组密码模式(包括ECB、CBC、CFB、OFB、CTR)、公钥、混合密码系统。第2部分重点介绍了认证方面的内容,涉及单向散列函数、消息认证码、数字签名、证书等。第3部分讲述了密钥、随机数、PGP、SSL/TLS 以及密码技......一起来看看 《图解密码技术(第3版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具