目录
第六章 远程访问@HttpExchange[SpringBoot 3]
第六章 远程访问@HttpExchange[SpringBoot 3]
远程访问是开发的常用技术,一个应用能够访问其他应用的功能。Spring Boot提供了多种远程访问的技术。 基于HTTP协议的远程访问是支付最广泛的。Spring Boot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring包装了底层HTTP客户的访问细节。
SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实现HTTP的远程访问。需要理解:
- @HttpExchange
- WebClient
WebClient特性:
我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。Spring 官方在 Spring 5 中引入了 WebClient 作为非阻塞式HTTP 客户端。
- 非阻塞,异步请求
- 它的响应式编程的基于Reactor
- 高并发,硬件资源少。
- 支持Java 8 lambdas 函数式编程
什么是异步非阻塞
理解:异步和同步,非阻塞和阻塞
上面都是针对对象不一样
异步和同步针对调度者,调用者发送请求,如果等待对方回应之后才去做其他事情,就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步
阻塞和非阻塞针对被调度者,被调度者收到请求后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后去做事情,就是非阻塞
6.1.1.1 准备工作:
1.安装GsonFormat插件,方便json和Bean的转换
2.介绍一个免费的、24h在线的Rest Http服务,每月提供近20亿的请求,关键还是免费的、可公开访问的。
6.1.1.2 声明式HTTP远程服务
需求: 访问 https://jsonplaceholder.typicode.com/ 提供的todos服务。 基于RESTful风格,添加新的todo,修改todo,修改todo中的title,查询某个todo。声明接口提供对象https://jsonplaceholder.typicode.com/todos 服务的访问
创建新的Spring Boot项目Lession18-HttpService, Maven构建工具,JDK19。 Spring Web, Spring Reactive Web , Lombok依赖。
step1:Maven依赖pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</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>
step2:声明Todo数据类
/**
* 根据https://jsonplaceholder.typicode.com/todos/1 的结构创建的
*/
public class Todo {
private int userId;
private int id;
private String title;
private boolean completed;
//省略 set , get方法
public boolean getCompleted() {
return completed;
}
public void setCompleted(bool