学习  服务调用方式 Http 之前,请先点击了解一下 系统架构的演变 。

其中的微服务和SOA,都需要用到 服务间的远程调用。
常有的原创调用方式有 RPC 和 Http.

  • RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表

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

    比如 Rest风格,就可以通过http协议来实现。

如果项目人员全部都是采用Java技术栈,使用Dubbo作为微服务架构是一个不错的选择。
而如果公司的技术栈多样化,而且你更喜欢Spring,那么你就可以选择SpringCloud搭建微服务。
我们将要写的乐优商场项目中,会选择SpringCloud套件,因此我们会使用Http方式来实现服务间调用

接下来我们就来试一下Http远程调用技术.

 

把工程模块放到工作空间里

 

然后去idea里打开:

然后选择刚刚放入的过程模块

 

后面 一直 Next下 一步,finish 就可以。(就不一一截图了)

我们就把demo工程成功导入了。启动器,和依赖 都配好了。 可以直接使用。

 

设置一下jdk

然后我们去test里面看看:(测试方式已经写好了)

 

点击第一个测试方法,以get的方式调用远程接口,它会访问百度的首页,并将百度首页的源码给打印出来。

 

然后我们再点击第二个测试方法,以post的方式调用远程接口,它会访问开源中国的首页,并将开源中国首页的源码给打印出来。

 

第一个测试和第二个测试的区别是,第一个是get请求,第二个是post请求。
下面我们再试试第三个测试方法,远程调用自己的接口。

在这之前,我们先将之前的实战项目启动起来,并测试是否能正常访问。

到引导类里去启动:

启动成功后,访问http://localhost:8888/user/1

运行访问成功。

然后我们试试第三个测试:

可以看到访问成功了!远程调用自己的接口成功了!

这里我们再顺便学一下 序列化 与 反序列化:

先定义一个MAPPER工具

然后编写代码,运行测试:

这就是 序列化 与 反序列化。
不过,这是我们手动序列化与反序列化。
Spring其实提供了一个RestTemplate模板工具类,对基于Http的客户端进行进行了封装,实现了 对象 与 json 之间的自动 序列化 与 反序列化。

我们来试一下

这样就使用成功了!


这里,我们了解一下总结使用 Http的服务调用方式。
其实已经有很多的http客户端工具,不用我们自己去写那么多代码,它们能够帮助我们做来实现对请求和响应的处理 ,例如:

  • HttpClient

  • OKHttp

  • URLConnection

后面用到相关工具的时候会学。
(并且 Spring 的 RestTemplate没有限定Http的客户端类型,而是进行了抽象,以上三种都可以支持)