feign是声明式WEbService客户端,它的使用方法是定义一个接口,在接口上添加注解,即可完成对服务提供方接口的绑定,Feign可以与Ribbon组合实现负载均衡。它让调用接口更加容易。
- Demo
服务端、客户端都可以参考之前的项目https://blog.csdn.net/zgsxhdzxl/article/details/103781278,现在在原来的基础上进行更改
- 新建一个service工程
- 新建一个接口,方法跟服务端的方法一致
@FeignClient(name = "PRODUCT", configuration = FeignClientConfig.class)
public interface TestService {
@RequestMapping("/test/get/{id}")
public String get(@PathVariable("id") String id);
}
- 由于做了接口加密,所以配置config
@Configuration
public class FeignClientConfig {
@Bean
public BasicAuthRequestInterceptor getBasicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("admin", "123456");
}
@Bean
public Logger.Level getFeignLoggerLevel() {
return feign.Logger.Level.FULL ;
}
}
- 新建一个consumer工程,配置跟之前的一样
- 在启动类上开启feign
@EnableFeignClients("com.zxl.service")
- 调用feign接口
@RequestMapping("/test")
@RestController
public class TestController {
@Autowired
private TestService testService;
@RequestMapping("/get")
public String get(String id) {
return testService.get(id);
}
}
- 结束
-
Feign原理
Feign的一个关键机制就是使用了动态代理。
- 如果对某个接口定义了FeignClient注解,那么Feign就会针对该接口创建一个动态代理。
- 调用接口,其实就是调用Feign创建的动态代理。
- Feign会根据接口上的注解、参数等,动态构建出需要的服务地址
- 进行请求以及接收相应消息