简单使用Feign
一:如何使用feign
1.消费者的启动类加上@EnableFeignClients注解
2.导入依赖
<!--Spring Cloud OpenFeign Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
3.创建feign接口
@Component
@RequestMapping("/miniprogram/message")
@FeignClient("${sc.app-name}-sc-miniprogram")
public interface MiniprogramClient {
@PostMapping("/miniprogram/send")
public Result sendMessageMiniprogram(@RequestBody JSONObject jsonData);
}
@FeignClient(“${sc.app-name}-sc-miniprogram”) 注解为生产者服务名称
@RequestMapping(“/miniprogram/message”)
@PostMapping(“/miniprogram/send”) 这两个注解为生产者接口
4.yml配置
# 使用openfeign的默认配置设置, 由于openfeign的默认链接时间 2s 以及响应时间 3s,根据业务的需要进行调整
feign:
hystrix:
enabled: false
httpclient:
enabled: true
okhttp:
enabled: false
client:
config:
default: #这里就是指的所有被加载的默认FeignClient实现的服务配置都生效
connectTimeout: 5000
readTimeout: 5000
5.可以开启feign日志
#在application.yml中使用 logging.level.<Feign客户端对应的接口的全限定名> 的参数配置格式来开启指定客户端日志
logging:
level:
com.bjpowernode.feign: debug
二:feign原理
1、将feign接口的代理类扫描到Spring容器中:
@EnableFeignClients开启feign注解扫描:FeignClientsRegistrar.registerFeignClients()扫描被 @FeignClient标识的接口生成代理类,并把接口和代理类交给Spring的容器管理。
2、为接口的方法创建RequestTemplate
当consumer调用feign代理类时,代理类会调用SynchronousMethodHandler.invoke()创建RequestTemplate(url,参数)
3、发出请求
代理类会通过RequestTemplate创建Request,然后client(URLConnetct、HttpClient、OkHttp)使用Request发送请求