Spring Cloud Feign服务之间的调用
微服务架构时代, 服务之间的调用很频繁并且有多种方式, 可以通过 JDK 原生的 URLConnection, Apache 的 Http Client, Netty 的异步 Http Client 或者 Spring 的 RestTemplate 去实现服务间的调用. 但最优雅、最方便的还是Spring Cloud 的 Open Feign.
Feign 是一种声明式、模板化的 HTTP 客户端. 在 Spring Cloud 中使用 Feign, 可以做到使用 HTTP 调用远程服务就像调用本地方法一样.
Feign 的一些特性
可以通过 application.properties 或者 application.yaml 类配置
feign:
client:
config:
feignName: joke-resource
connectTimeout: 5000 # 连接超时时间
readTimeout: 5000 # 读超时间
loggerLevel: full # 日志级别
errorDecoder: com.example.SimpleErrorDecoder # 错误解码器
retryer: com.example.SimpleRetryer # 配置重试
requestInterceptors: # 配置拦截器
- com.example.FooRequestInterceptor
- com.example.BarReqeustInterceptor
decode404: false
encoder: com.example.SimpleEncoder # 编码器
decoder: com.example.SimpleDecoder # 解码器
contract: com.example.SimpleContract # Contract 配置
Feign 为每一个 FeignClient 都提供了一个 feign.Logger实例.有两种方式.
feign:
client:
config:
default:
loggerLevel: full # 日志级别
logging:
level:
com.deepflow.clients.api.*: debug # feign 接口所在的路径
Feign 的调用分为两层, 即 Ribbon 的调用和 Hystrix 的调用, 高版本的 Hystrix 是默认关闭的
ribbon.ReadTimeout: 120000
ribbon.ConnectTimeout: 30000