返回

06.route通过注册中心自动配置加载

06.route通过注册中心自动配置加载

route通过注册中心Eureka自动加载配置

配置

  • gateway及后端微服务引入注册中心客户端eureka-client
<!-- 引入 Spring Cloud Netflix Eureka Client 相关依赖,将 Eureka 作为注册中心的客户端,并实现对其的自动配置 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • eureka-client starter的引入,会同时引入ribbon,作为后续请求,负载均衡的实现

eureka-ribbon

spring.cloud.gateway.discovery.locator.enabled设为true,启用服务发现的DiscoveryClientRouteDefinitionLocator

spring:
  cloud:
    # Spring Cloud Gateway 配置项,对应 GatewayProperties 类
    gateway:
      discovery:
        locator:
          enabled: true  # default fase,设为true开启
@Configuration(proxyBeanMethods = false)
	@ConditionalOnProperty(value = "spring.cloud.discovery.reactive.enabled",//fzb 默认使用响应式的方式
			matchIfMissing = true)
	public static class ReactiveDiscoveryClientRouteDefinitionLocatorConfiguration {

		@Bean//fzb spring.cloud.gateway.discovery.locator.enabled配为true时,才开启DiscoveryClientRouteDefinitionLocator
		@ConditionalOnProperty(name = "spring.cloud.gateway.discovery.locator.enabled")
		public DiscoveryClientRouteDefinitionLocator discoveryClientRouteDefinitionLocator(
				ReactiveDiscoveryClient discoveryClient,//响应式的客服端 Eureka就是 EurekaReactiveDiscoveryClient
				DiscoveryLocatorProperties properties) {
			return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);
		}

	}
  • eureka-client的引入,会开启TimedSupervisorTask执行HeartbeatThread的心跳任务, 默认每隔30s一次

RouteRefreshListener 每隔30s接收到HeartBeatEvent事件,同时会发送RefreshRoutes事件

rrf

heartbeat

CachingRouteLocator 收到RefreshRoutesEvent事件,重新获取路由时会发现多了一个DiscoveryClientRouteDefinitionLocator (负责从注册中心获取新路由配置)

cacheroutelocator

验证

http://localhost:7070/ORDER/order/get 前边ORDER为eureka-client从eureka-server获取的服务名,

LoadBalancerClientFilter在NettyRoutingFilter之前通过ribbon执行负载均衡策略,选择一个服务实例

lbancerClient

总结

  • springgateway 接收注册中心心跳事件,发送路由刷新事件,
  • CachingRouteLocator 最终调用DiscoveryClientRouteDefinitionLocator#getRouteDefinitions 获取注册中心最新的路由

代码实现:https://github.com/fengzhenbing/spring-cloud-gateway-demo.git

Built with Hugo
Theme Stack designed by Jimmy
本站访问量:   您是本站第 位访问者