SpringCloud面试题, Ribbon 和 Feign 调用服务的区别是什么?
SpringCloud面试题, Ribbon 和 Feign 调用服务的区别是什么?
QA
Step 1
Q:: Ribbon 和 Feign 调用服务的区别是什么?
A:: Ribbon 和 Feign 是 Spring Cloud 中用于实现服务调用的两种技术。Ribbon 是一个客户端负载均衡器,通过它可以配置服务调用的负载均衡策略,并直接使用 RestTemplate 或 OkHttpClient 来发起 HTTP 请求。Feign 是一个声明式的 HTTP 客户端,集成了 Ribbon,开发者只需要定义接口并用注解的方式指定服务和方法,Feign 会自动处理服务调用、负载均衡等工作。主要区别在于使用方式上:Ribbon 更底层,提供了更大的灵活性,但需要手动实现;Feign 更高层,使用简单,更符合面向接口编程的思想。
Step 2
Q:: 如何配置 Ribbon 的负载均衡策略?
A:: Ribbon 提供了多种负载均衡策略,如轮询(Round Robin)、随机(Random)、权重(Weighted Response Time)等。通过在配置文件中定义 Ribbon 相关配置(如 serviceName.ribbon.
NFLoadBalancerRuleClassName)来指定使用的负载均衡策略。此外,开发者也可以自定义负载均衡策略,继承 AbstractLoadBalancerRule 并重写 choose 方法即可。
Step 3
Q:: Feign 中如何处理服务降级?
A:: 在 Feign 中,服务降级可以通过实现 fallback 或 fallbackFactory 机制来实现。在定义 Feign 客户端接口时,可以通过 @
FeignClient 注解指定 fallback 类。当调用服务出现异常时,会自动调用 fallback 类中的方法。FallbackFactory 提供了更灵活的错误处理机制,允许根据不同的异常类型进行更细致的降级处理。
Step 4
Q:: Ribbon 和 Eureka 的关系是什么?
A:: Ribbon 和 Eureka 经常一起使用来实现客户端的负载均衡。Eureka 是一个服务发现工具,通过它可以动态地获取服务实例列表。Ribbon 则可以使用这些实例列表进行负载均衡调度。通过 Eureka 提供的服务注册与发现功能,Ribbon 可以自动获取可用的服务实例,从而实现动态负载均衡。