二、spring cloud
1. 关于Spring Cloud Netflix
The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon)…
Netflix组件是分布式微服务管理的一套解决实现
具体demo在我的gitee
https://gitee.com/shenshuxin01/spring-cloud_-first
1.1 微服务注册中心Eureka
eureka分为服务端+客户端。客户端是就是一个个真实的微服务,通过网络(可能是http连接)把服务注册到服务端。当然每个客户端可以读取到服务端所有的微服务注册信息。
但是好像Netflix好像不再更新维护eureka,所以现在推荐使用nacos注册中心
,其有点不同,eureka的服务端是java一个模块。但是nacos的服务端是一个jar包,直接启动就行了。
1.2 配置中心Spring Cloud Config
配置中心也是分服务端客户端,实现的功能是把各个微服务的配置文件统一管理配置,每个springboot项目的application.properties文件放到配置中心的服务端。当微服务启动时先去配置中心找指定的配置文件,然后启动项目。
同样也是不推荐使用,建议使用nacos配置中心
解释下几个文件:
-
bootstrap.properties
此文件也是springboot的配置文件,作用和application.properties一样。不同的是加载顺序,此文件优先于加载。使用此配置时需要导入一个strap-starter依赖。一般用来配置系统信息 -
application.properties
一般的springboot配置文件,一般用来配置该微服务的信息,优先级次于上文的strap
1.3 负载均衡Ribbon
提供微服务负载均衡算法。是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。 开发步骤:当前微服务A只有一个实例并注册到eureka。为了负载均衡,我们手动复制一个A,只改一下端口号,然后注册到eureka。完成
同样推荐nacos的负载均衡,并且nacos里面已经封装好了ribbon,我们不需要额外配置。
1.4 微服务远程调用Feign
微服务注册到eureka的目的当然是为了被调用。
目前feign已经封装好了HTTP API的调用。我们只需要导入starter-openfeign依赖,然后指定被调用的微服务名称、调用的URI就行。当然使用feign的前提是已经搭建好了eureka/nacos。
feign内部封装了ribbon负载均衡
1.5 熔断降级Hystrix
当某个微服务A出现故障的时候,我们可以采取措施:当调用A时,直接返回false,不再等待,并且触发调用失败代码逻辑。
这一功能已经在feign封装好了,只需要在@FeignClient(name = "xxx-producer", fallback =xxxFalse.class)
添加fallback属性即可。 这里自定义xxxFalse类进行处理失败逻辑即可
1.6 网关路由Zuul
听起来好像是nginx。因为整个项目划分为多个微服务,每个微服务有不同的ip、port。前端想要调用某个服务需要知道对应的ipport等等,这很麻烦。如果有一个统一的ip、port进行分发就好了,前端只需要知道服务id就行。这就用到了zuul网关路由,其实还有很多功能:负载均衡,统一鉴权,协议转换,监控监测等一系列功能。
新建微服务zuul模块:需要用到 注册中心。前端传过来待调用的微服务id、uri。我们进行动态feign调用
// TODO 待补充