Skip to content

面试速答(先看这里)

**一句话结论:**默认情况下 Feign 调用超时不会自动重试 。

60秒标准回答:

默认情况下 Feign 调用超时不会自动重试 。 发生超时或其他错误时,Feign 会抛异常 。 当然,我们可以通过 Retryer 来启用重试机制

Retryer 允许你配置请求失败后的重试策略。 Retryer 可以配置重试次数、重试间隔等参数。你可以通过 @FeignClient 注解的 configuration 属性来配置 Feign 的重试行为

1、 定义一个 Retryer 配置类

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**Retryer 允许你配置请求失败后的重试策略。
  • **要点2:**1、 定义一个 Retryer 配置类 :
  • **要点3:**2、在 @FeignClient 注解中应用配置:

**记忆锚点:**Retryer → Feign → FeignClient → Feign 调用超时不会自动重试 → configuration → 调用超时不会自动重试

易错提醒:

  • Retryer 允许你配置请求失败后的重试策略。

加分表达:

  • 当然,我们可以通过 Retryer 来启用重试机制。
  • 你可以通过 @FeignClient 注解的 configuration 属性来配置 Feign 的重试行为。

追问准备:

  • 围绕「Retryer」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Feign」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「FeignClient」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

默认情况下 Feign 调用超时不会自动重试。 发生超时或其他错误时,Feign 会抛异常 。 当然,我们可以通过 **Retryer** 来启用重试机制。

Retryer 允许你配置请求失败后的重试策略。Retryer 可以配置重试次数、重试间隔等参数。你可以通过 @FeignClient 注解的 configuration 属性来配置 Feign 的重试行为。

1、 定义一个 Retryer 配置类 :

java
import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;

@Configuration
public class FeignRetryConfig {

    @Bean
    public Retryer retryer() {
        // 设置最大重试次数为 3,重试间隔为 1 秒
        return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1), 3);
    }
}

2、在 @FeignClient 注解中应用配置:

java
@FeignClient(name = "hollis-service", configuration = FeignRetryConfig.class)
public interface ExampleServiceClient {
    @GetMapping("/api/data")
    String getData();
}