contract: [ˈkɒntrækt , kənˈtrækt],合同;合约;契约;
OpenFegin的契约配置,主要作用是程序员和Fegin约定一种声明HTTP接口的方式。具体来说,我们在FeginClient接口类中声明的方法,使用SpringMVC注解来标识请求路径、请求参数等。OpenFegin能够识别这些SpringMVC注解的原因就是我们默认配置了一个SpringMvcContract
,这样的话OpenFegin才知道SpringMVC注解的含义,并转换成请求。
默认Contract配置代码
@Configuration(proxyBeanMethods = false)
public class FeignClientsConfiguration {
.....
@Autowired(required = false)
private List<AnnotatedParameterProcessor> parameterProcessors = new ArrayList<>();
.....
@Bean
@ConditionalOnMissingBean
public Contract feignContract(ConversionService feignConversionService) {
return new SpringMvcContract(this.parameterProcessors, feignConversionService);
}
.....
}
一般的我们保持默认的Contract配置就好
Fegin原生契约
OpenFegin是对Fegin的进一步扩展,Fegin有自己的一套标识请求方法的注解,下面我们就演示一下配置Fegin原生契约并使用的方法
@FeignClient(name = "provider-nacos", contextId = "origin-client", configuration = ProviderOriginClientConfig.class)
public interface ProviderOriginClient4 {
@RequestLine("GET /test")
String test();
}
//@Configuration
public class ProviderOriginClientConfig {
@Bean
public Contract feignContract(ConversionService feignConversionService) {
return new Contract.Default();
}
}
@RestController
public class ConsumerNacosDemoController {
@Autowired
private ProviderOriginClient4 providerOriginClient4;
@RequestMapping("testOriginFegin")
public String testOriginFegin() {
return providerOriginClient4.test();
}
}
当然
ProviderOriginClientConfig
也可以替换成yaml方式进行配置。 下面是YAML的配置方式
@FeignClient(name = "provider-nacos", contextId = "origin-client-yaml")
public interface ProviderOriginClientYaml {
@RequestLine("GET /test")
String test();
}
feign:
client:
config:
origin-client-yaml:
contract: feign.Contract.Default
@RestController
public class ConsumerNacosDemoController {
@Autowired
private ProviderOriginClientYaml providerOriginClientYaml;
@RequestMapping("testOriginFeginYaml")
public String testOriginFeginYaml() {
return providerOriginClientYaml.test();
}
}
总结
本篇主要讲述了OpenFegin中对契约Contract的配置,一般的使用默认的就好。