前言
Spring Cloud Gateway
版本 Hoxton.SR6
。
路由
Route
类是最终执行依赖的类,RouteDefine
类是路由规则定义的类。Spring Cloud Gateway
会将RouteDefine
转换成Route
以供程序使用。RouteDefineLocator
接口定义了RouteDefine
类的来源。PropertiesRouteDefinitionLocator
解析GatewayProperties
中的路由定义,也就是yml配置中的路由定义。RouteDefinitionRepository
接口继承RouteDefinitionLocator
和RouteDefinitionWriter
,RouteDefinitionWriter
接口中有两个方法:增加和删除路由定义。InMemoryRouteDefinitionRepository
路由定义来源于内存,可以通过actuator新增删除路由。
ribbon的listOfServers
在zuul网关中,我们可以使用ribbon来做客户端负载均衡。假如后端服务列表是固定的,不需要采用服务注册与发现组件,那么我们就可以在ribbon中给service配置listOfServers属性。
1 | service: |
当我们使用Spring Cloud Gateway
的Spring Cloud loadbalancer
来做负载均衡时,我们同样可以脱离服务注册与发现组件,将静态服务列表配置到properties文件中:
1 | spring.cloud.discovery.client.simple.instances.service1[0].uri=http://s11:8080 |
这种方式是采用的SimpleDiscoveryClient
做服务发现客户端。
后端实例健康检查
在ribbon中,我们可以使用ServerStats来维护后端状态,负载均衡器在选择后端实例的时候可以根据状态来实现断路操作。同样,在SpringCloud loadbalancer
中,可以通过HealthCheckServiceInstanceListSupplier
来维护后端实例的状态。
采用HealthCheckServiceInstanceListSupplier
的方式,特别适用SimpleDiscoveryClient
这种将后台服务地址固定写在properties文件中的情况。因为如果采用外部服务发现的情况下,例如Eureka、Nacos、Consul等,是可以剔除失效服务的。
在LoadBalancerClientConfiguration
类中中可以看到如下配置:
1 |
|