OpenFeign 独立使用配置
OpenFeign 本身是一个声明式的 HTTP 客户端,无需依赖 Nacos 等注册中心即可直接使用。核心依赖仅需 Spring Cloud OpenFeign:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.3</version>
</dependency>
启用 OpenFeign 功能
在 Spring Boot 主类或配置类上添加 @EnableFeignClients 注解:
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
定义 Feign 客户端接口
通过接口直接声明远程调用,使用 @FeignClient 指定目标服务 URL:
@FeignClient(name = "exampleClient", url = "http://api.example.com")
public interface ExampleFeignClient {
@GetMapping("/items/{id}")
ResponseEntity<Item> getItem(@PathVariable("id") String id);
@PostMapping("/items")
ResponseEntity<Void> createItem(@RequestBody Item item);
}
配置超时与重试
在 application.yml 中配置全局或客户端专属的超时参数:
feign:
client:
config:
default: # 全局默认配置
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
exampleClient: # 针对具体客户端的配置
connectTimeout: 3000
readTimeout: 3000
自定义拦截器与编解码器
实现 RequestInterceptor 添加请求头等通用逻辑:
public class AuthInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
template.header("Authorization", "Bearer token123");
}
}
通过配置类注册自定义编解码器:
@Bean
public Encoder feignEncoder() {
return new JacksonEncoder();
}
@Bean
public Decoder feignDecoder() {
return new JacksonDecoder();
}
日志调试配置
在配置文件中启用详细日志(需配合 logback.xml 设置级别):
logging:
level:
com.example.demo.ExampleFeignClient: DEBUG
异常处理策略
自定义错误解码器处理非 2xx 响应:
public class CustomErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
if (response.status() == 404) {
return new ItemNotFoundException();
}
return new FeignException.BadRequest(response.reason());
}
}
注册到 Feign 配置:
feign:
client:
config:
default:
errorDecoder: com.example.CustomErrorDecoder
9803

被折叠的 条评论
为什么被折叠?



