RPC和HTTP
常用的两种调用方式
- PRC:Remote Produce Call远程过程调用(不常用)
- 实现远程调用其他计算机的服务
- 像调用本地服务一样调用远程服务
- (最常用)http其实是一种网络传输协议,基于TCP,规定了数据传输的格式
- 缺点:消息封装臃肿
- 优点:对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念
http客户端工具
微服务选择了http,那么我们需要考虑自动如何来实现对请求和响应的处理开源世界已经集成很多http客户端工具,能够帮助我们做这些事情,例如:
- HttpClient
- OKHttp
- HttpUrlConnection
- 等
这些不同的客户端,api各不相同,功能相同
HttpClient
- 介绍:
- HttpClient是Apache公司的产品,是Http Components下的一个组件。
官网
- HttpClient是Apache公司的产品,是Http Components下的一个组件。
- 特点:
- 基于标准、纯净的Java语言。实现了Http1.0和Http1.1
- 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)
- 支持HTTPS协议。
- 通过Http代理建立透明的连接。
- 自动处理Set-Cookie中的Cookie。
使用 HttpClient
// //创建HttpClients客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
//get请求
HttpGet request = new HttpGet("http://www.baidu.com");
// 请求 返回值
String response = this.httpClient.execute(request, new BasicResponseHandler());
// 模仿浏览器发送请求
request.setHeader("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
spring的RestTemplate
spring提供一个RestTemplate模板工具类,对基于http的客户进行了封装,非常方便RestTemplate并没有限定http客户端类型,而是进行了抽象(底层不是自己的),
目前常用3种都有支持
- HttpClient
- OKHttp
- JDK原生的HttpUrlConnection(默认的)
使用RestTemplate
创建springBoot项目
在启动类初始化RestTemplate对象
@Bean
public RestTemplate restTemplate(){
// 默认HttpUrlConnection,如果要用其他的就在()中指定
return new RestTemplate();
}
test
@Autowired
private RestTemplate restTemplate;
/**
第一参数:访问其他项目中方法的路径
第二参数:访问的方法返回的参数
*/
User user = restTemplate.getForObject
("http://localhost:9090/hello/hello?id=3", User.class);
实现了:跨项目之间的调用