我将功能区用作API网关和eureka服务器上的负载平衡器。当客户端请求到达我的API网关时,它是否每次都要查询服务注册表以获得服务的可用实例,还是Ribbon将可用实例存储到其缓存中?
答案 0 :(得分:1)
Spring Cloud Ribbon与发现客户端进行对话,以获取有关给定服务的运行实例的信息。 Discovery客户端保留eureka注册的内存缓存,以使查找速度更快。
您可以查看Spring Cloud Netflix文档以获取更多信息:
https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-eureka-server.html
Eureka服务器没有后端存储,但是注册表中的所有服务实例都必须发送心跳信号以使其注册保持最新(因此可以在内存中完成)。客户端还具有Eureka注册的内存缓存(因此,不必为每个对服务的请求都去注册表)。
此外,对于带有Eureka的Ribbon: https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#_using_ribbon_with_eureka
当Eureka与Ribbon结合使用时(也就是说,两者都在类路径上),ribbonServerList将被DiscoveryEnabledNIWSServerList的扩展名覆盖,该扩展名将填充Eureka中的服务器列表。
来自任何区域的客户端都可以查找注册表信息(每30秒发生一次)以查找其服务(可能在任何区域中)并进行远程调用。有关更多信息,请访问Official Netflix Eureka Documentation
答案 1 :(得分:0)
我知道功能区为每个服务安排了一个计划任务,该任务将从注册表中获取新的服务器列表。
您可以查找以下内容:ScheduledThreadPoolExecutor
任务的默认间隔为30秒,您可以使用config进行更改:
your-service-name:
ribbon:
ServerListRefreshInterval: 200(the time you want to set in ms)