zuul 慢慢获取新的服务客户端
zuul fetch new service client slowly
我正在通过 Zuul 调用我的演示服务。当我重新启动演示服务并在 Eureka 中注意到它时,Zuul 抛出了一个关于 "Load balancer does not have available server for client: demo-service".
的异常
当我通过 Zuul 不断调用 demo-service 时,它大约在 30 秒后才开始工作。
尤里卡服务器配置:
spring.application.name=registry
server.ip=127.0.0.1
server.port=6006
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${server.ip}:${server.port}/eureka/
eureka.server.enable-self-preservation=false
eureka.server.eviction-interval-timer-in-ms=5000
zuul 配置:
spring.application.name=gateway
server.port=4002
## demo
zuul.routes.api-demo.path=/demo/**
zuul.routes.api-demo.serviceId=demo-service
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6006/eureka
eureka.instance.prefer-ip-address=true
eureka.client.registryFetchIntervalSeconds=5
logging.level.root=debug
eureka 客户端配置(演示服务):
spring.application.name=demo-service
server.port=6020
endpoints.shutdown.enabled=true
endpoints.shutdown.sensitive=false
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6006/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=10
eureka.client.healthcheck.enabled=true
Zuul 配置中的 eureka.client.registryFetchIntervalSeconds=5
似乎不起作用,考虑到 Zuul 最多需要 30 秒才能知道演示服务实例。我怎样才能让它正常工作?
Eureka Client和Eureka Server之间有很多缓存层和间隔。所以你的 Eureka 客户端无法立即识别状态的变化。但是您可以使用以下属性减少延迟。
eureka.server.responseCacheUpdateInvervalMs
- 在尤里卡服务器中定义。
- 是API的eureka服务器的响应缓存时间。默认值为 30 秒,对于大多数情况来说太大了。您可以减小此值。
eureka.client.registryFetchIntervalSeconds
- 在尤里卡客户端中定义。
- 从 Eureka 服务器获取注册表的时间间隔。你可以减少它。
ribbon.ServerListRefreshInterval
- 在 ribbon(eureka) 客户端中定义。
- 通常Eureka与Ribbon一起使用。所以Ribbon的fetching interval对于减少延迟也很重要。默认为 30 秒。你可以减少它。
我正在通过 Zuul 调用我的演示服务。当我重新启动演示服务并在 Eureka 中注意到它时,Zuul 抛出了一个关于 "Load balancer does not have available server for client: demo-service".
的异常当我通过 Zuul 不断调用 demo-service 时,它大约在 30 秒后才开始工作。
尤里卡服务器配置:
spring.application.name=registry
server.ip=127.0.0.1
server.port=6006
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${server.ip}:${server.port}/eureka/
eureka.server.enable-self-preservation=false
eureka.server.eviction-interval-timer-in-ms=5000
zuul 配置:
spring.application.name=gateway
server.port=4002
## demo
zuul.routes.api-demo.path=/demo/**
zuul.routes.api-demo.serviceId=demo-service
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6006/eureka
eureka.instance.prefer-ip-address=true
eureka.client.registryFetchIntervalSeconds=5
logging.level.root=debug
eureka 客户端配置(演示服务):
spring.application.name=demo-service
server.port=6020
endpoints.shutdown.enabled=true
endpoints.shutdown.sensitive=false
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6006/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=10
eureka.client.healthcheck.enabled=true
Zuul 配置中的 eureka.client.registryFetchIntervalSeconds=5
似乎不起作用,考虑到 Zuul 最多需要 30 秒才能知道演示服务实例。我怎样才能让它正常工作?
Eureka Client和Eureka Server之间有很多缓存层和间隔。所以你的 Eureka 客户端无法立即识别状态的变化。但是您可以使用以下属性减少延迟。
eureka.server.responseCacheUpdateInvervalMs
- 在尤里卡服务器中定义。
- 是API的eureka服务器的响应缓存时间。默认值为 30 秒,对于大多数情况来说太大了。您可以减小此值。
eureka.client.registryFetchIntervalSeconds
- 在尤里卡客户端中定义。
- 从 Eureka 服务器获取注册表的时间间隔。你可以减少它。
ribbon.ServerListRefreshInterval
- 在 ribbon(eureka) 客户端中定义。
- 通常Eureka与Ribbon一起使用。所以Ribbon的fetching interval对于减少延迟也很重要。默认为 30 秒。你可以减少它。