一、简介:
Feign是一个声明式的Rest 客户端,它能让Rest调用更加简单。Feign提供Http的请求模板,通过编写简单的接口和插入的注解,就可以定义好Http请求的参数,格式,地址信息,Feign 则会完全代理Http请求,我们只需要向调用方法一样调用它就可以完成服务请求及相关处理。SpringCloud 对Feign进行了封装,使其支持 springMvc标准注解和HttpMessageConverters。Feign可以与Eureka 和Ribbon 组合使用以支持负载均衡。
二、Feign的使用
1. 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
2. 在启动类上加注解 @EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.example.ribbon.ribbon.fegin")
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
3. 使用Feign调用接口
@FeignClient(value = "eureka-client-user-service",configuration = FeignConfiguration.class)
public interface UserRemoteClient {
@GetMapping("/user/helloToPerson")
String sayHelloToPerson(@RequestParam("userName") String userName);
}
提供服务的接口是这样的
@GetMapping("/user/helloToPerson")
public String sayHelloToPerson(@RequestParam("userName") String userName){
return myService.sayHelloToPerson(userName);
}
@FeignClient中的eureka-client-user-service就是你要调用的服务的名字
@FeignClient中的 FeignConfiguration.class 就是写Feign配置信息的类名
@FeignClient 注解的作用:它标识当前是一个Feign的客户端,Value属性是对应的服务名称,也就是你需要调用哪个服务中的接口。
4. controller层的调用
@RestController
public class UserController {
private MyService myService;
@Autowired
public UserController(MyService myService){
this.myService = myService;
}
@GetMapping("/user/helloToPerson")
public String sayHelloToPerson(@RequestParam("userName") String userName){
return myService.sayHelloToPerson(userName);
}
}
三、自定义Feign的配置
@Configuration
public class FeignConfiguration {
/**
* 日志级别的配置
* @return
*/
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.NONE;
}
/**
* basic认证配置
* @return
*/
@Bean
public BasicAuthenticationInterceptor basicAuthenticationInterceptor(){
return new BasicAuthenticationInterceptor("user","password");
}
/**
* 配置超时时间
* @return
*/
@Bean
public Request.Options options(){
return new Request.Options(5000,10000);
}
}
写好这个类之后,要在@FeignClient 的注解中加入 configuration = FeignConfiguration.class
四、GZIP压缩配置
可以在配置文件中加入如下配置:
#gzip压缩配置
feign.compression.request.enabled=true
feign.compression.response.enabled=true
#配置压缩类型、最小压缩值的准
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048