前面我们介绍了如何使用Ribbon的earger-load
配置加速Spring Cloud中对服务接口的第一次调用。可是这样只是解决了内部服务间的调用,另外一个问题依然经常困扰我们,那就是网关到内部服务的访问。由于Spring Cloud Zuul的路由转发也是通过Ribbon实现负载均衡的,所以它也会存在第一次调时比较慢的情况。那么这个时候我们要如何设置呢?
Zuul中的Eager Load配置
在Spring Cloud Zuul中也提供了一个配置参数来实现earger-load,具体如下:
zuul.ribbon.eager-load.enabled=true
但是,可能你尝试一下之后会发现,并没有起效?为什么呢?这是由于Spring Cloud Zuul中实现eager-load的时候同Ribbon中一样,都需要指定具体哪些服务需要饥饿加载。那么在Spring Cloud Zuul中如何具体指定呢?
在Spring Cloud Zuul的饥饿加载中没有设计专门的参数来配置,而是直接采用了读取路由配置来进行饥饿加载的做法。所以,如果我们使用默认路由,而没有通过配置的方式指定具体路由规则,那么zuul.ribbon.eager-load.enabled=true
的配置就没有什么作用了。
因此,在真正使用的时候,我们可以通过zuul.ignored-services=*
来忽略所有的默认路由,让所有路由配置均维护在配置文件中,以达到网关启动的时候就默认初始化好各个路由转发的负载均衡对象。此处没有配制出所有的路由,只配置了一个feign路由做测试:
zuul.ribbon.eager-load.enabled=true
zuul.ignored-services=*
zuul.routes.api-feign.path=/feign/**
zuul.routes.api-feign.service-id=feign
我们发现,在Zuul启动时,就已经初始化了Ribbon上下文,而不是在第一次调用时初始化。
DynamicServerListLoadBalancer for client feign initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=feign,current list of Servers=[192.168.250.6:8006],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:192.168.250.6:8006; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@53b8a0f7
来源:CSDN
作者:猎户星座。
链接:https://blog.csdn.net/qq_24313635/article/details/103923708