【Spring Cloud】声明式客户端Feign

简介

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

首先要添加依赖


	org.springframework.cloud
	spring-cloud-starter-feign

在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

你可能感兴趣的:(spring,cloud学习)