简介
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
Feign具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign.
如何使用feign
首先要添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
在springboot的启动类上增加@EnableFeignClients注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerFeignApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerFeignApplication.class, args);
}
}
创建一个接口,并添加@FeignClient注解
@FeignClient(name = "producer-name", configuration = Configuration2.class)
public interface FeignClient2 {
@RequestMapping(value = "/book/{serviceName}")
public String findbook(@PathVariable("serviceName") String serviceName);
}
上面使用Configuration2为Feign客户端进行自定义配置,Configuration2 类不能在启动类同级或同级文件夹目录下
@Configuration
public class Configuration2 {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("user", "password123");
}
}
feignContract方法配置契约为feign自身契约,则不能使用sprign mvc的注解,要使用feign的注解。
feignLoggerLevel方法配置打印具体请求http的具体信息。
basicAuthRequestInterceptor方法配置请求的用户认证。
还可以在Configuration2 中配置编码器、解码器。
@RestController
public class MovieController {
@Autowired
private FeignClient2 feignClient2;
@GetMapping("/{serviceName}")
public String findbook(@PathVariable String serviceName) {
return this.feignClient2.findbook(serviceName);
}
}
当然,定制@FeignClient标注的configuration类还可以有另一个方法,直接配置application.yaml文件即可,示例如下:
feign:
client:
config:
feignName: myServiceName
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
encoder: com.example.MyEncoder
decoder: com.example.MyDecoder
Feign使用了ribbon来进行负载均衡,指定ribbon的负载均衡策略,不能在feign的配置类中进行配置,需要在ribbon配置类中进行配置。
即不可在上述的Configuration2 配置,需要在TestConfiguration进行配置。具体配置见【使用Ribbon进行微服务调用】
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@RibbonClient(name = "provider-name", configuration = TestConfiguration.class)
public class ConsumerMovieFeignApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerMovieFeignApplication.class, args);
}
}
关于feign的更详细的讲解,这里还推荐一篇博文。
https://www.cnblogs.com/davidwang456/p/6435311.html?utm_source=itdadao&utm_medium=referral