尚医通项目总结(一)----------微服务、Spring Boot和Spring Cloud的区别
跟着尚硅谷做了尚医通项目来学习,原本以为知识点并不是很多,面试后发现如果深挖,有很多需要学习理解的点,此系列博客记录项目中涉及的知识点,也希望能帮助到做了同一个项目的同学。博客中的知识点都是自己搜集资料总结,如有错误欢迎指出!
此项目使用Spring Cloud技术栈,各个微服务站点基于Spring Boot构建。要了解这个项目,首先就要了解什么是微服务。
1.微服务
微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的API进行通信的小型独立服务组成。微服务架构使得应用程序更易于扩展和更快地开发。使用微服务架构可以将应用程序构建为独立的组件,并将每个应用程序进行作为一项服务运行。在对服务进行更新的时候不向整体式架构那样复杂,只需要针对各项服务进行更新、部署和扩展即可。简单来讲,微服务将一个复杂的应用拆分成多个独立自治的服务,服务和服务之间通过松耦合的形式交互。
此处出现第一个面试问题:
你的项目微服务是怎么拆分的?
这个项目的微服务拆分首先是根据业务功能进行的拆分,比如用户服务、医院服务、订单服务这几个微服务,都是按照功能维度对微服务进行拆分的。考虑到系统的复用性,由于在登录和订单服务中都用到了阿里云的短信服务,所以将短信服务独立出来。
微服务的结构搭建起来了,但是各个微服务之间并不是毫不相关的,微服务之间需要进行一些通信,那么
微服务之间的通信方式是什么?
微服务之间的通信方式分为两种,一是同步调用,二是异步调用。对于同步调用,该项目使用到了SpringCloud中的Feign组件来实现,对于异步调用,使用到的是RabbitMQ消息队列。在实现同步调用时,将调用功能封装到了一个新的模块中(项目中的service-client模块)。在该模块的pom文件中引入openfeign依赖,新建一个接口进行调用封装。使用@FeignClient注解来表明要调用的服务的名称,这个名称是nacos中注册的名称,然后在接口内部,将要调用的方法直接粘过来,并在Mapping注解中补充完整方法的路径。在参数的@PathVariable注解中也要指定参数的名称。最后还需要在使用到的微服务模块进行调用,在相应的pom文件中引入对应的client依赖,在需要调用的地方使用@Autowired注解把接口注入,至此,使用Feign组件完成了远程调用。(图上是feign示例)使用消息队列进行异步通信涉及到的问题太多,下次再总结!
2.Spring Boot和Spring Cloud
Spring是一个生态体系,包含了Spring Framework、Spring Boot、Spring Cloud等。
Spirng Cloud是基于Spring Boot的微服务解决方案。它为开发者提供了很多工具,用于快速构建分布式系统的一些通用模式,例如:配置管理、注册中心、服务发现、限流、网关、链路追踪等。SpringCloud是一系列框架的集合,可以包含SpringBoot,它是离不开SpringBoot的,但是SpringBoot是可以单独使用的。
SpringBoot只是一个快速开发框架,算不上是微服务框架。SpringCloud+SpringBoot实现微服务开发,是SpringCloud具备微服务开发的核心技术RPC远程调用技术,SpringBoot的web组件默认继承了SpringMVC,可以实现HTTP+JSON的轻量级传输,编写微服务接口,所以SpringCloud依赖SpringBoot框架实现微服务开发。
以上是个人暑期实习面试中遇到的一些关于该项目的问题总结,如有错误欢迎指出,如有其他问题,也欢迎一起讨论!