目录
1 feign简介
feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。feign底层还是通过ribbon实现的负载均衡、超时控制等
2 入门案例
注册中心和服务提供者还是eureka入门中的代码
2.1 主启动类添加启动feign注解
@EnableEurekaClient
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
2.2 编写service接口
@Component
@FeignClient(value = "PAYMENT")
public interface PaymentService {
@GetMapping("/payment/get")
Map getPayment(@RequestParam("id") Long id);
}
2.3 controller调用
@Autowired
private PaymentService paymentService;
@GetMapping("/payment/get-by-feign/{id}")
public Map getPaymentByFeign(@PathVariable("id") Long id) {
return paymentService.getPayment(id);
}
2.4 调用测试
做好如上配置即可进行调用
http://localhost:8089/consumer/payment/get-by-feign/1
3 日志增强
3.1 日志增强简介
Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。说白了就是对Feign接口的调用情况进行监控和输出。
- NONE:默认的,不显示任何日志
- BASIC:仅记录请求方法、URL、 响应状态码及执行时间
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
- FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据
3.2 配置日志范围
@Configuration
public class FeignConfig {
@Bean
public Logger.Level feignLogLevel() {
return Logger.Level.BASIC;
}
}
3.3 配置日志范围
logging:
level:
com.consumer.service.PaymentService: debug
3.4 调用测试
这样在调用的时候控制台会有如下打印
2020-11-08 22:37:07.546 DEBUG 19092 --- [strix-PAYMENT-2] com.consumer.service.PaymentService : [PaymentService#getPayment] ---> GET http://PAYMENT/payment/get?id=1 HTTP/1.1
2020-11-08 22:37:07.554 DEBUG 19092 --- [strix-PAYMENT-2] com.consumer.service.PaymentService : [PaymentService#getPayment] <--- HTTP/1.1 200 (7ms)