新网站内部优化怎么做,360推广登录,p图软件哪个好用,中铁三局招聘文员要求身材好feign调用的大致过程#xff1f; Feign进行远程调用的#xff0c;这里面包括#xff0c;注册中心、负载均衡、FeignClient之间的关系#xff0c;微服务通过不论是eureka、nacos也好注册到服务端#xff0c;Feign是靠Ribbon做负载的#xff0c;而Ribbon需要拿到注册中心的…feign调用的大致过程 Feign进行远程调用的这里面包括注册中心、负载均衡、FeignClient之间的关系微服务通过不论是eureka、nacos也好注册到服务端Feign是靠Ribbon做负载的而Ribbon需要拿到注册中心的服务列表将服务进行负载缓存到本地然后FeignClient客户端在进行调用。 对应的流程图如下 Ribbon是如何进行负载的也就是如何获取nacos、eureka的服务列表这个很关键。 这里的核心就是Ribbon的注册配置核心类的接口也是靠LoadBalancer做负载的 无非就是ILoadBalancer接口的方法。 我们看下ILoadBalancer接口的方法。 以上的负载均偶默认的ZoneAwareLoadBalancer 通过继承父类DynamicServerListLoadBalancer的restOfInit方法里面比较重要的两个方法enableAndInitLearnNewServersFeature和updateListOfServers方法。 enableAndInitLearnNewServersFeature方法里面
LOGGER.info(Using serverListUpdater {}, serverListUpdater.getClass().getSimpleName());
serverListUpdater.start(updateAction);ServerListUpdater.start方法的实现通过自定义线程去拿这就是获取服务列表 什么是Ribbon负载均衡策略 服务列表获取说了当然负载均衡的策略这块也有必要讲一下主要有七种 A:RoundRobinRule轮询策略按照服务顺序依次循环调用 B:WeightedResponseTimeRule权重比策略优先选择权重比高的服务也就是服务响应时间比C:较短的响应时间越长权重比越低 D:RandomRule随机策略服务提供者列表随机选择一个服务 E:BestAvailableRule最小连接数策略获取服务列表中连接数最小的服务实例 F:RetryRule重试策略重试获取已经失效的服务指定时间没有获取到返回NULL G:AvailabilityFilteringRule可用性敏感策略过滤非健康服务实例选择lianji H:ZoneAvoidanceRule区域敏感策略 Ribbon-eager-load饥饿加载模式 Ribbon对于负载Client是在服务启动后发生调用的时候才会去创建Client所以在第一次发生http请求调用的时候不光要算上http的请求时间还要算上Client的创建时间所以第一次调用的时候才会很慢写个方法调用下;
GetMapping(/requestSystem2Api)
public String requestSystem2Api(){long startTime System.currentTimeMillis();RString stringR iTestServiceClient.testRequestMethod();if (null !stringR){log.info(接口返回stringR.getMsg());}long needTime System.currentTimeMillis() - startTime;log.info(接口调用需要的时间needTime);return ;
}从调用日志可以看出第一次调用System2服务Ribbon的DynamicServerListLoadBalancer会将feign客户端进行负载然后进行调用第一次调用的时间就是会长一些第二次调用直接进行请求可以看到调用时间很快。 如何解决 开启Ribbon饥饿加载 在项目启动的时候可以从日志看到已经把Lxlxxx-system2服务进行加载从而避免了第一次请求超时的情况 最后 其实这种饥饿加载模式类似于“客户端负载预热”的一个操作项目启动的时候进行加载防止服务之间调用可以因为数据量、业务逻辑处理复杂性导致接口超时如果你的服务之间调用业务处理比较复杂、且慢不妨可以试试这种解决方式。 需要咨询更多的问题 欢迎识别下方二维码开启我们的故事吧。