SpringCloud 面试题, Ribbon 和 Feign 调用服务的区别是什么?
SpringCloud 面试题, Ribbon 和 Feign 调用服务的区别是什么?
QA
Step 1
Q:: Ribbon 和 Feign 调用服务的区别是什么?
A:: Ribbon 是一个负载均衡器,它是客户端负载均衡的一部分,用于从一组服务器中选择一个服务器来执行请求。Feign 是一个声明式的 HTTP 客户端,它集成了 Ribbon 用于负载均衡,但提供了更高级别的 API 以简化 HTTP 客户端的使用。具体来说,Ribbon 需要开发者自行编写服务调用的代码并手动选择负载均衡策略,而 Feign 通过声明式的方法自动集成 Ribbon,并简化了服务调用的实现。
Step 2
Q:: 如何配置 Ribbon 的负载均衡策略?
A:: Ribbon 提供了多种负载均衡策略,比如轮询 (Round Robin)、随机 (Random)、基于响应时间的加权 (Weighted Response Time) 等。可以通过配置文件或 Java 代码来指定负载均衡策略。例如,在 application.yml 文件中,可以通过 'ribbon.NFLoadBalancerRuleClassName'
来指定策略类名,或者在 Java 代码中通过实现 IRule 接口来自定义负载均衡策略。
Step 3
Q:: Feign 是如何实现服务调用的?
A:: Feign 通过注解和接口定义 HTTP 请求。开发者只需定义一个接口,并在方法上使用 Feign 提供的注解(如 @RequestMapping、@
GetMapping 等)来指定请求的路径和方法类型。Feign 在运行时会生成该接口的实现,并利用 Ribbon 进行负载均衡调用服务,简化了与 RESTful 服务的集成。
Step 4
Q:: 在 Feign 中如何处理重试机制?
A:: Feign 中可以通过配置或代码的方式来启用和配置重试机制。默认情况下,Feign 会根据 Ribbon 的配置进行重试,但可以通过配置 'feign.client.config.default.retryer'
来指定重试策略。也可以通过自定义 Feign Retryer 来实现更复杂的重试逻辑。
Step 5
Q:: 如何通过 Feign 自定义请求头?
A:: 可以通过 Feign 提供的 RequestInterceptor 接口来实现对请求头的自定义。开发者可以创建一个实现该接口的类,并在其 'apply'
方法中修改请求头信息。然后在 Spring 配置类中将该拦截器注册到 Feign 客户端。