对于服务调用方式,其实除了ribbon还有一个声明式的客户端负载均衡调度器feign,相比较对于服务之间依赖关系比较复杂和服务接口数量庞大的微服务体系中,使用声明式调度器feign的频率更高,因为feign调用机制底层实际上还是基于ribbon实现的,但是feign针对请求信息的组装机制更加灵活,可以把需要调用的服务的所有方法统一定义在一个接口中,基于FeignClient注解指定需要调用的服务提供者,基于各类Mapping注解标注接口方法,feign会基于JDK动态代理机制扫描所有EnableFeignClients注解中指定的基准包及其子包中的所有FeignClient映射接口并注册动态代理实例,根据接口中方法的签名和服务提供者信息自动构建请求信息并调用对应服务提供者中和Feign映射接口对应方法签名相同的方法执行,在视图层控制器就可以直接注入Feign映射接口并调用接口中的方法实现服务调用,Feign优点就是服务调用方式更加灵活,由于把需要调用的服务方法封装成了接口,所以对于请求服务信息的组装更加灵活,同时对于需要调用的服务提供者数量比较多和微服务之间关系比较复杂的情况下,Feign的调用关系清晰,这样做的好处就是,当服务提供者信息出现变动,只需要改动消费者的Feign映射接口部分声明信息即可,如果是使用传统ribbon原始方式调用服务,每次调用的url都是显式指定了的,如果调用次数很多改动量可想而知,间接破坏微服务架构的弹性和伸缩性。Feign还提供了服务降级机制实现高可用提高伸缩性,具体的服务降级机制实现和高可用实现原理放到后续Hystrix总结再来细说。综上所述,所以在客户端负载均衡调用机制的临床运用中,Feign调用机制更为常用。