Feign声明式服务调用
- Feign是一个声明式的REST客户端,它用了基于接口的注解方式,很方便实现客户端配置
- Feign最初由Netflix公司提供,但不支持SpringMVC注解,后由SpringCloud对其封装,支持了SpringMVC注解
Feign快速入门
步骤:
-
在消费端引入open-feign依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
-
编写feign调用接口
/** * Feign的声明式接口,发起远程调用 * * 1.定义接口 * 2.接口上添加@FeignClient,设置value属性为服务提供者的名称 * 3.编写调用接口,接口的声明规则和提供方保持一致 */ @FeignClient(value = "FEIGN-PROVIDER") public interface GoodsFeignClient { @GetMapping("goods/findOne/{id}") public Goods findGoodsById(@PathVariable("id") int id); }
-
在启动类添加@EnableFeignClients注解,开启Feign功能
@EnableDiscoveryClient // 激活DiscoveryClient @EnableEurekaClient @SpringBootApplication @EnableFeignClients//开启Feign功能 public class ConsumerApp { public static void main(String[] args) { SpringApplication.run(ConsumerApp.class,args); } }
-
测试调用
@Autowired private GoodsFeignClient goodsFeignClient; @GetMapping("/goods/{id}") public Goods findGoodsById(@PathVariable("id") int id){ Goods goods = goodsFeignClient.findGoodsById(id); return goods; } }
Feign超时配置
-
Feign底层依赖于Ribbon实现负载均衡和远程调用
-
Ribbon默认超时时间为1秒
-
在消费方超时配置:
ribbon: connectTimeout: 1000 #链接超时时间为毫秒 ReadTimeout: 3000 #逻辑处理超时时间,毫秒
Feign日志记录
-
Feign只能记录debug级别的日志信息
#设置项目日志级别为debug logging: level: com.xxx: debug #包名
-
定义Feign日志级别Bean
/* NONE,不记录 BASIC,记录基本的请求行,响应状态码数据 HEADERS,记录基本的请求行,响应状态码数据,记录响应头信息 FULL,记录完成的请求,响应数据 */ @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; }
-
启用该Bean
@FeignClient(configuration = XxxCOnfig.class)