1. 服务调用方式
1.1 RPC和HTTP
无论是微服务还是
SOA
,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?
常见的远程调用方式有以下
2
种:
RPC
:
Remote Produce Call
远程过程调用,
RPC
基于
Socket
,工作在会话层。自定义数据格式
,速度快,效
率高。早期的
webservice
,现在热门的
dubbo
,都是
RPC
的典型代表
Http
:
http
其实是
一种网络传输协议,基于
TCP
,工作在应用层,规定了数据传输的格式
。现在客户端浏览器
与服务端通信基本都是采用
Http
协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的
提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。
现在热门的
Rest
风格,就可以通过
http
协议来实现。
区别
:
RPC
的机制是根据语言的
API
(
language API
)来定义的,而不是根据基于网络的应用来定义的。
如果你们公司全部采用
Java
技术栈,那么使用
Dubbo
作为微服务架构是一个不错的选择。
相反,如果公司的技术栈多样化,而且你更青睐
Spring
家族,那么
Spring Cloud
搭建微服务是不二之选。在我们的项
目中,会选择
Spring Cloud
套件,因此会使用
Http
方式来实现服务间调用。
1.2Http客户端工具
既然微服务选择了
Http
,那么我们就需要考虑自己来实现对请求和响应的处理。不过开源世界已经有很多的
http
客户
端工具,能够帮助我们做这些事情,例如:
- HttpClient
- OKHttp
- URLConnection
不过这些不同的客户端,
API
各不相同。而
Spring
也有对
http
的客户端进行封装,提供了工具类叫
RestTemplate。
2.3. Spring的RestTemplate(细节很多,需要大量学习,掌握其中方法)
Spring
提供了一个
RestTemplate
模板工具类,对基于
Http
的客户端进行了封装,并且实现了对象与
json
的序列化和
反序列化,非常方便。
RestTemplate
并没有限定
Http
的客户端类型,而是进行了抽象,目前常用的
3
种都有支持:
HttpClient
OkHttp
JDK
原生的
URLConnection
(默认的)