简介
一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需要创建一个接口并在接口上添加注解即可。
-
作用
- feign旨在使编写java http客户端变的非常容易
- ribbon使用负载均衡+RestTemplate,但实际过程中接口不仅仅被调用一次,所以对每一个微服务自行封装一些客户端来包装这些依赖服务的调用。所以,feign在基础上进行进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在feign的实现下,我们只需要创建接口并使用注解的方式来配置它,即可完成服务提供方的接口绑定,简化使用ribbon的开发量
- feign集成了ribbon,通过轮询实现了客户端的负载均衡
-
集成
代码实现
- 改pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 使能feign
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
- 增加feignservice
@Component
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface PaymentFeign {
@GetMapping("/payment/discovery")
CommonResult discovery();
@PostMapping("/payment/create")
CommonResult create(@RequestBody Payment payment);
@GetMapping("/payment/get/{id}")
CommonResult getPaymentById(@PathVariable("id") Long id);
}
- 增加controller
@Resource
private PaymentFeign paymentFeign;
@PostMapping("/create")
public CommonResult<Payment> createPayment(@RequestBody Payment payment) {
return paymentFeign.create(payment);
}
超时控制
- 默认时间为1秒
ribbon:
#建立时长
ReadTimeout: 5000
#连接时长
ConnectTimeout: 5000
日志
提供日志打印功能,通过日志打印级别来进行配置调整,对feign接口的调用情况进行监控和输出
- NONE:默认,不显示日志
- BASIC:仅记录请求方法、URL、响应状态码及执行时间
- HEADERS:除了BASIC定义的信息之外,还有请求和响应头信息
- FULL:除了HEADERS定义的信息外,还有请求和响应的正文及数据和元数据
- 改yml
logging:
level:
com.fuzhiwei.cloud2020.service.PaymentFeign: debug
- 增加日志基本配置
@Configuration
public class FeignConfig {
@Bean
Logger.Level logLevel() {
return Logger.Level.FULL;
}
}