contract: [ˈkɒntrækt , kənˈtrækt],合同;合约;契约;

OpenFegin的契约配置,主要作用是程序员和Fegin约定一种声明HTTP接口的方式。具体来说,我们在FeginClient接口类中声明的方法,使用SpringMVC注解来标识请求路径、请求参数等。OpenFegin能够识别这些SpringMVC注解的原因就是我们默认配置了一个SpringMvcContract,这样的话OpenFegin才知道SpringMVC注解的含义,并转换成请求。

默认Contract配置代码

  1. @Configuration(proxyBeanMethods = false)
  2. public class FeignClientsConfiguration {
  3. .....
  4. @Autowired(required = false)
  5. private List<AnnotatedParameterProcessor> parameterProcessors = new ArrayList<>();
  6. .....
  7. @Bean
  8. @ConditionalOnMissingBean
  9. public Contract feignContract(ConversionService feignConversionService) {
  10. return new SpringMvcContract(this.parameterProcessors, feignConversionService);
  11. }
  12. .....
  13. }

一般的我们保持默认的Contract配置就好

Fegin原生契约

OpenFegin是对Fegin的进一步扩展,Fegin有自己的一套标识请求方法的注解,下面我们就演示一下配置Fegin原生契约并使用的方法

  1. @FeignClient(name = "provider-nacos", contextId = "origin-client", configuration = ProviderOriginClientConfig.class)
  2. public interface ProviderOriginClient4 {
  3. @RequestLine("GET /test")
  4. String test();
  5. }
  1. //@Configuration
  2. public class ProviderOriginClientConfig {
  3. @Bean
  4. public Contract feignContract(ConversionService feignConversionService) {
  5. return new Contract.Default();
  6. }
  7. }
  1. @RestController
  2. public class ConsumerNacosDemoController {
  3. @Autowired
  4. private ProviderOriginClient4 providerOriginClient4;
  5. @RequestMapping("testOriginFegin")
  6. public String testOriginFegin() {
  7. return providerOriginClient4.test();
  8. }
  9. }

当然ProviderOriginClientConfig也可以替换成yaml方式进行配置。 下面是YAML的配置方式

  1. @FeignClient(name = "provider-nacos", contextId = "origin-client-yaml")
  2. public interface ProviderOriginClientYaml {
  3. @RequestLine("GET /test")
  4. String test();
  5. }
  1. feign:
  2. client:
  3. config:
  4. origin-client-yaml:
  5. contract: feign.Contract.Default
  1. @RestController
  2. public class ConsumerNacosDemoController {
  3. @Autowired
  4. private ProviderOriginClientYaml providerOriginClientYaml;
  5. @RequestMapping("testOriginFeginYaml")
  6. public String testOriginFeginYaml() {
  7. return providerOriginClientYaml.test();
  8. }
  9. }

总结

本篇主要讲述了OpenFegin中对契约Contract的配置,一般的使用默认的就好。