Spring Boot

Spring Boot是一个单体应用,应用程序打成一个包。

谈一谈对Spring Boot的理解:

在初期我们都用过ssm、ssh等框架,在搭建框架过程中需要考虑各种配置文件、jar包冲突等问题,集成第三方框架也会耗费大量时间,而Spring Boot是一个轻量级可以快速集成开发的框架,能够将包通过manven继承方式合部依赖起来,快速整合第三方插件,完全采用注解方式减化XML配置,内置HTTP服务器,默认嵌入的是Tomcat,最终以java应用程序执行。

Spirng Boot优、缺点:

优点:简单、快捷、轻便、便于测试

缺点:随着业务增加叠迭, 单体应用会越来越庞大,应用越大启动时间也会越长。当单体服务出现宕机,所有功能都不能使用。

Spring Cloud

在遇到所有学习的文章里,开篇就会学习到“微服务是一种架构思想”,当我们系统架构满足这种思想,他就可以说是微服务。在具体应用项目开发时,我们用的不是微服务,我们只是用了微服务的架构思想,真正开发时,我们采用的是“分布式系统开发”。

分布式系统开发,最重要的特点:高可用、高性能、高并发。

疑问,哪什么是微服务的架构思想?

我的理解是,就是每个服务都是一个小小的服务,在自己的一个服务里,专注的做自己的一件事。

微服务就是将每个模块根据业务功能细化拆分,成为一个只做一件事的单体服务,让每个服务之间进行松耦合。每个服务都可以单独部署,当某个服务出现问题,不会影响其他服务使用,每个独立的单体都可以进行多个部署,来完成负载均衡。

微服务的优、缺点:

优点:独立布署、解耦、每个服务都可以由一个团队开发、扩展性强。

缺点:有优点,肯定也会存在一定的缺点,在具体项目应用时,微服务本身是一种架构思想,开发时采用分布式系统开发,与单体对比来说,会使项目整体结构变得更复杂。使用分布式系统开发,还会存在分布式数据库架构问题,需要考虑数据一致性问题。分布式服务布署,也会比传统布署方式要繁琐的多。

微服务比单体应用的优势:

微服务是一种架构思想,系统如果满足这种思想,我们都可以说是微服务,微服务与单体相比而言,单体应用出现宕机,导致整个服务不可用,微服务不同是,将每个业务都拆解成独力的一个个服务,服务之间进行松耦合,如果某个服务出现问题,不会影响其他服务使用,每个服务可以布署多个,来完成负载均衡。

服务与服务之间如何调用:

服务之间调用可以借助Spring Cloud Feign来完成,Feign内部整合了Ribbon和Hystrix,Feign具有客户端负载均衡和服务容错的功能。

比如:ruoyi-demo服务内部调用ruoyi-system服务提供的REST服务:

首先,Feigh在很多微服务中都需要用到,所以我们将feign依赖,引入到common公共的pom里。

然后,创建一个与common服务平级的feign-api包,用于存放每个微服务的feign模块,进行统一管理,方便各服务之前调用。

下面以ruoyi-cloud框架为例,截图目录层级:

springbootcloud 多项目使用Logstash springcloud springboot_java

 最后,我们创建FeignClient接口,以及如果feign失败FallBackFactory指定回退的接口。

FeignClient文件样例:

springbootcloud 多项目使用Logstash springcloud springboot_微服务_02

FallBackFactory文件样例:

springbootcloud 多项目使用Logstash springcloud springboot_java_03

 FeignClient属性含义:

value:指服务的名称,它是与ruoyi-demo服务配置yml里name名称是一致的,就是注册到网关里的服务名称。

springbootcloud 多项目使用Logstash springcloud springboot_spring cloud_04

 contextId:是当前这个服务的别名,如果Feign Client有多个,并且value值相同的时候,需要手动通过contextId设置别名,否出程序会抛出异常。

 fallBackFactory:指回退当前方法,如果服务调用出现异常, 我们可以指定回退方法,方法回退可以通过Throwable对像打印出异常日志,分析问题。

springbootcloud 多项目使用Logstash springcloud springboot_spring cloud_05

 注:Feign的回退功能是基于Hystrix实现的,如果想要回退方法生效,需要在yml中配置开启Hystrix。

springbootcloud 多项目使用Logstash springcloud springboot_java_06