1. 服务注册中心 - eureka
失效剔除
对于已经异常下线的服务Eureka采用了定时清除:Eureka
Server在启动的时候会创建一个定时任务,每隔60秒就去将当前服务提供者列表中超过90秒还没续约的服务剔除出去
自我保护
Eureka Server在运行期间会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,Eureka Server会将这些实例保护起来,让这些实例不会过期
@EnableEurekaServer
高可用服务注册中心
- 多个配置文件application-peerXXX.yml等的互相依赖
- 启动项目java -jar使用不同配置文件
2. 服务提供者 - 注册服务到eureka上
服务提供者将自己注册到Eureka上,供其它应用发现然后调用,这就是的服务提供者,服务提供者主要有如下一些功能:
服务注册
服务提供者在启动的时候会通过发送REST请求将自己注册到Eureka Server上,同时还携带了自身服务的一些元数据信息。
服务同步
服务注册中心之间也互相注册为服务,当服务提供者发送请求到一个服务注册中心时,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步,通过服务同步,两个服务提供者的服务信息我们就可以通过任意一台注册中心来获取到
服务续约
在注册完服务之后,服务提供者会维护一个心跳来不停的告诉Eureka Server:“我还在运行”,以防止Eureka Server将该服务实例从服务列表中剔除,这个动作称之为服务续约
3. 服务消费者
消费者主要是从服务注册中心获取服务列表,拿到服务提供者的列表之后,服务消费者就知道去哪里调用它所需要的服务了
获取服务
启动服务消费者的时候,它会发送一个REST请求给服务注册中心来获取服务注册中心上面的服务提供者列表,而Eureka Server上则会维护一份只读的服务清单来返回给客户端,这个服务清单并不是实时数据,而是一份缓存数据,默认30秒更新一次
服务调用
服务消费者从服务注册中心拿到服务提供者列表之后,通过服务名就可以获取具体提供服务的实例名和该实例的元数据信息,客户端将根据这些信息来决定调用哪个实例
服务下线
服务提供者在运行的过程中可能会发生关闭或者重启,当服务进行正常关闭时,它会触发一个服务下线的REST请求给Eureka Server,告诉服务注册中心我要下线了,服务注册中心收到请求之后,将该服务状态置为DOWN,表示服务已下线
4. 构建网关
添加注解
- 在入口类上添加@EnableZuulProxy注解表示开启Zuul的API网关服务功能
配置路由规则
#所有符合/gateway/**的请求都将被转发到service-provider服务上
zuul.routes.gateway.path=/gateway/**
zuul.routes.gateway.serviceId=service-provider
请求过滤
请求过滤有点类似于Java中Filter过滤器,先将所有的请求拦截下来,然后根据现场情况做出不同的处理
- 定义过滤器…MyFilter extends ZuulFilter
- 配置过滤器Bean