文章目录
1.fegin 是什么
Feign是一个声明式WebService客户端。 使用Feign能让编写Web Service客户端更加简单。
2.fegin 能干什么
1.可以很容易实现 http java 客户端
2.它自身集成了ribbon,更优雅的实现服务的调用和负载均衡。
3.fegin 的原理
Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,放回给调用者。Feign远程调用的基本流程,大致如下图所示。
在这里插入图片描述
图1 Feign远程调用的基本流程
从上图可以看到,Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的 Request 请求。通过Feign以及JAVA的动态代理机制,使得Java 开发人员,可以不用通过HTTP框架去封装HTTP请求报文的方式,完成远程服务的HTTP调用。
4.fegin 与openFegin两者的区别
5.openfegin 的使用
5.1.编写 pom.xml 文件,加入openFegin的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
5.2.编写启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
通过标签 @EnableFeignClients 可以开启openfegin的功能
5.3.编写openfegin的客户端
@Component
@FeignClient(name = "cloud-producer")
public interface ProducerFeign {
@GetMapping()
String ok();
}
说明
在上面的代码里面我们写入一个 @FeignClient 注解,这个注解最主要的作用就是创建一个openFegin的客户端,它里面的参数说明如下:
name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。
url: url一般用于调试,可以手动指定@FeignClient调用的地址。
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口,而且还要配合hystrix 一起使
fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码。
path: 定义当前FeignClient的统一前缀,如果你调用的服务有多个控制器,而你只想调用某一个控制器的接口,可以配合name一起使用。
5.4 编写控制器
@RestController
@RequestMapping
public class IndexController {
@Autowired
private ProducerFeign producerFeign;
@GetMapping()
public String index() {
return producerFeign.ok();
}
}