1、作用
服务远程调用。伪 PRC。
基于 http、okhttp 通信
2、使用
1、pom 文件引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 引入okhttp -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
复制代码
2、代码调用
2.1、客户端调用
@SpringBootApplication
@EnableFeignClients//启动feignClient注解扫描动态bean装载
public class CloudClientApp
{
public static void main( String[] args )
{
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(CloudClientApp.class, args);
configurableApplicationContext.getBean(TestDomain.class);
}
}
@FeignClient("cloud-provider")//服务提供方服务实例名
public interface ClientFeignService {
//调用的方法名uri
@GetMapping("/testRemote")
String testRemote();
}
复制代码
2.2、服务提供方
@RestController
public class ProviderTestController {
@GetMapping("/testRemote")
private String testRemote(){
return this.getClass().getName();
}
}
复制代码
配置 okhttp
#feign.okhttp.enabled=true
#feign.httpclient.enabled=false
复制代码
3、Feign 封装的功能
1、参数解析和装载
2、针对指定的 feignClient,生成代理类
3、对 FeignClient 的方法解析
4、包装 Request 请求,发起请求,并组装返回参数
4、核心处理类和代码流程
4.1、bean 的动态装载
注解:@EnableFeignClients
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
复制代码
org.springframework.cloud.openfeign.FeignClientsRegistrar
基于 spring 扩展,继承 ImportBeanDefinitionRegistrar,自定义 bean 包装,将 bean 装载到 IOC 容器。
评论