Feign简介
Feign是Netflix开发的一个声明式的HTTP客户端(远程服务调用组件),只需要接口+注解即可完成对于微服务的调用,不需要使用RestTemplate+Ribbon来对微服务进行访问,简化了编程,其是基于动态代理机制,目标是减少HTTP调用的复杂性
依赖
1 2 3 4 5
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
|
feign底层
feign底层默认使用的是jdk原生的URLConnection发送http请求,没有连接池,可以使用Apache的HttpClient来替换Feign原始的httpClient,使用连接池。通过动态代理的方式来构建Http请求
配置启动类
1 2 3 4 5 6 7 8 9
| @SpringBootApplication @EnableEurekaClient
@EnableFeignClients(basePackages = "com.zhanghe.study") public class ConsumerApp { public static void main(String[] args) { SpringApplication.run(ConsumerApp.class,args); } }
|
feign接口编写
1 2 3 4 5 6 7
| @FeignClient(value = "MICRO-SERVICE-DEPT-PROVIDER") public interface DeptClient {
@RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET) public Dept get(@PathVariable("id") long id); }
|
直接调用该方法就可以调用该微服务的接口
@FeignClient参数说明
首先主程序入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处理,否则无法加载@FeignClient注解所标注的接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public @interface FeignClient { @AliasFor("name") String value() default "";
@Deprecated String serviceId() default ""; @AliasFor("value") String name() default "";
String qualifier() default ""; String url() default ""; boolean decode404() default false; Class<?>[] configuration() default {}; Class<?> fallback() default void.class; Class<?> fallbackFactory() default void.class; String path() default "";
boolean primary() default true; }
|