一、Feign概述
Feign是Spring Cloud提供的声明式、模板化的HTTP客户端,运行在consumerdua端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。(ribbon+restTemplate)+优化=feign
二、启动类
- 在ConsumerApplication启动类上,添加
@EnableFeignClients
注解,开启Feign接口扫描功能
@SpringBootApplication
@EnableDiscoveryClient
//@EnableFeignClients(basePackages = "com.bjpowernode.feign")
@EnableFeignClients//开启feign接口扫描
public class ConsumerApp {
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class);
}
}
三、feign的接口类
- 编写Feign客户端接口类UserFeign
- 注解@FeignClient声明Feign的客户端,指明服务名称
- 接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址
- Feign会通过动态代理,帮我们生成实现类。
- fallbackFactory是工厂类,用于生成 fallback 类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码。
- fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback 指定的类必须实现 @FeignClient 标记的接口。
@FeignClient(value = "feign-provider", fallbackFactory = UserFeignFallback.class)
@RequestMapping(value = "/provider")
public interface UserFeign {
@RequestMapping(value = "/getUserById/{id}")
public User getUserById(@PathVariable(value = "id") Integer id);
- fallback就是调用失败或者请求超时时,调用的数据。实现类必须用@Component注解,以保证注入到spring容器
- 在使用FeignClient时,Spring会按name创建不同的ApplicationContext,通过不同的Context来隔离FeignClient的配置信息,在使用配置类时,不能把配置类放到Spring App Component scan的路径下,否则,配置类会对所有FeignClient生效
四、feign接口传参的三种方式
- ?传参 @RequestParam("id") 和