目录
一、在微服务中服务调用方式
1、RPC和HTTP
无论是微服务还是SOA,都面临着服务间的远程调用,那么服务间的远程调用方式有哪些
常见的远程调用方式有:
RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式。基于原生TCP通信、速度快、效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表
HTTP:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。
现在热门的rest风格,就可以通过http协议来实现。
例如
发送一个http请求(包含请求头和请求体)
localhost:访问的是对应的ip地址主机
8088:当访问到对应ip地址主机之后,进入到对应的进程端口
/user/9:请求交给前端控制器DispatcherServlet处理,控制器通过HanderMapping找到相应的Controller组件处理请求,执行Controller组件约定方法处理请求,
在约定方法调用模型组件完成业务处理。约定方法可以返回一个ModelAndView对象,封装了处理结果数据和视图名称信息,控制器接收ModelAndView之后,调用ViewResolver组件,
定位View(JSP)并传递数据信息,生成响应页面
2、Spring 的RestTemplate
spring 提供了一个RestTemplate模板工具类,对基于http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。resttemplate并没有限定http的客户端类型,而是进行了抽象,目前常用的3种都有支持
HttpClient
OkHttp
JDK原生的HttpUrlConnection(默认的)
RestTemplate简单跨服务测试
在没有指定RestTemplate的客户端类型,默认使用的是HttpUrlConnection
拿到的是json数据,RestTemplate在底层将json转换成了对象
运行
3、SpringCloud
微服务是一种结构方式,最终肯定需要技术架构去实现。
微服务的实现方式很多,但是最火的莫过于spring cloud。
后台硬:作为spring家族的一员,有整个spring全家桶靠山,背景十分强大。
技术强:spring作为java领域的前辈,可以说是功力深厚。有强力的技术团队支撑,一般人还真比不起。
群众基础好:可以说大多数程序员的成长都伴随着spring框架。
使用方便:想想大家都体会到了springboot给我们开发带来的便利,而spring cloud完全支持springboot的开发,用很少的配置就能完成微服务框架的搭建
二、搭建微服务项目
在日常工作中我们采用的是创建独立的项目通过远程调用服务来实现各个服务之间的调用,现在我们为了方便起见,采用聚合工程的方式进行搭建。
创建maven父工程
需要子项目手动去引入
创建服务提供方
创建modul子项目user-service
添加对应依赖
配置文件
创建springboot的启动类
创建user类
创建UserMapper接口
创建UserService类
创建userController类
启动并访问
现在服务的提供方就准备好了
创建服务调用方
与上面类似,这里不再赘述,需要注意的是,我们调用user-service的功能,因此不需要mybatis相关依赖。
创建modul子项目consumer-demo
添加springboot的自动启动包
创建springboot启动类,唯一不同之处在于使用了远程服务调用RestTemplate
创建user类
创建ConsumerController来实现远程数据库查询的服务调用
这个时候刷新一下整个maven项目
点击右下角出现的弹框
以后就可以直接在这里启动