一、简介
feign简介:远程调用使用
二、核心
核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,放回给调用者。
三、JDK Proxy代理实例特点
远程接口的本地JDK Proxy代理实例,有以下特点:
(1)Proxy代理实例,实现了一个加 @FeignClient 注解的远程调用接口;
(2)Proxy代理实例,能在内部进行HTTP请求的封装,以及发送HTTP 请求;
(3)Proxy代理实例,能处理远程HTTP请求的响应,并且完成结果的解码,然后返回给调用者。
四、实现案例
准备两个模块,一个是支付模块,一个是客户模块,现在通过feign实现支付模块去调用客户模块
1、支付模块导包
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、在支付模块上增加注解
basePackages表示扫描的包,可以自定义的
@SpringBootApplication
@EnableFeignClients(basePackages = {"com.*"})
public class CloudProviderPaymentApplication {
public static void main(String[] args) {
SpringApplication.run(CloudProviderPaymentApplication.class, args);
}
}
3、在客户模块上建立feign接口
FeignClient参数详解
contextId:用来区分FeignClient实例
value:对应的是调用的微服务的服务名,对用服务发现、走网关调用,这个很关键。
fallbackFactory:一种回退的方式,回退的方式有两种,一种是fallbackFactory,一种是fallback ,在默认情况下fallback默认优先级比fallfactory优先级高
@FeignClient(contextId = "feignTestService",value = "cloud-consumer-service",fallbackFactory = FeignTestFallbackFactory.class)
public interface FeignTestService {
@PostMapping("/test/feignTest")
void feignTest();
}
4、在客户模块上建立feign回滚工厂
和上面fallbackFactory类对应
@Component
public class FeignTestFallbackFactory implements FallbackFactory<FeignTestService > {
private static final Logger log = LoggerFactory.getLogger(FeignTestFallbackFactory.class);
@Override
public FeignTestService create(Throwable cause) {
log.error("服务调用失败...................");
return new FeignTestService() {
@Override
public void feignTest() {
System.out.println("服务调用失败");
}
};
}
}
5、客户模块controller层
@PostMapping("/feignTest")
public void FeignTest(){
System.out.println("feign接口已经被调用了");
}
6、支付模块controller层
@Autowired
private FeignTestService feignTestService;
@GetMapping("/test")
public void testFeign() {
System.out.println("开始执行feign!!!!");
feignTestService.feignTest();
}