原创

Spring Cloud之服务调用方式

1. RPCHTTP

       无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种:

RPCRemote Produce Call远程过程调用RPC基于Socket,工作在会话层。自定义数据格式,速度快,效 率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表

 

Httphttp其实是一种网络传输协议,基于TCP,工作在应用层,规定了数据传输的格式。现在客户端浏览器 与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的 提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。 现在热门的Rest风格,就可以通过http协议来实现。

 

两者的区别:RPC的机制是根据语言的APIlanguage API)来定义的,而不是根据基于网络的应用来定义的。 如果公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。 相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么Spring Cloud搭建微服务是不二之选。在项目中,选择Spring Cloud搭建微服务,一般会使用Http方式来实现服务间调用。

2. Http客户端工具

       既然微服务选择了Http,那么我们就需要考虑自己来实现对请求和响应的处理。不过开源世界已经有很多的http客户端工具,能够帮助我们做这些事情,例如: HttpClient OKHttp URLConnection 不过这些不同的客户端,API各不相同。而Spring也有对http的客户端进行封装,提供了工具类叫RestTemplate

3. SpringRestTemplate

       Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和 反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持:

1.     HttpClient

2.     OkHttp

3.     JDK原生的URLConnection(默认的)

 

       接下来我写了个Demo 演示下完Http客户端工具

        


        

        已经在导入的项目中的 HttpDemoApplication 注册一个 RestTemplate 对象,可以在启动类位置注册:    


        

        启动springboot项目,在项目中的测试类中直接 @Autowired 注入:

                

        

        通过RestTemplategetForObject()方法,传递url地址及实体类的字节码,RestTemplate会自动发起请求,接收响应,并且帮我们对响应结果进行反序列化。

 

        运行结果为:

 

        

        不要在意那些被我划掉的地方.. 因为涉及到隐私问题..所以划掉了

 

        了解完Http客户端工具,接下来就可以正式学习微服务了....下一篇 初识Spring Cloud

正文到此结束