SpringCloud 系列实战 | 第五篇: 服务消费者整合(Feign)进行远程调用服务基本用法(SpringBoot)(2.X版本)
一、Feign简介
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
- Feign 采用的是基于接口的注解;
1.1 添加pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1.2 启动类添加注解扫描路径
@EnableFeignClients(basePackages = {"com.customer.feign"})
1.3 创建FeignConfiguration类 打印查看Fegin的请求日志过程信息
package com.customer.configuration;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfiguration {
/**
* 日志level有4个级别
* 1.NONE,不记录任何日志
* 2.BASIC,仅记录请求方法、URL以及响应状态码和执行时间:
* ---> GET http://PROVIDER-SERVER/getTest HTTP/1.1
* <--- HTTP/1.1 200 (7ms)
* 3.HEADRES,除了BASIC以外的还会记录请求和响应的头信息
* 4.FULL,所有
* @return
*/
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.BASIC;
}
}
1.4 Controller编写Feign测试代码
@RestController
public class TestController {
@Value("${server.port}")
private String port;
@Autowired
private TestFeign testFeign;
@GetMapping(value = "getTest")
public String getTest(){
String test = testFeign.getTest();
System.out.println("getTest-feign消费者调用提供者返回数据:"+test);
return test;
}
1.5 创建Feign接口和代码
@FeignClient(value = "PROVIDER-SERVER",configuration = FeignConfiguration.class, fallbackFactory = TestFeignFallback.class)
public interface TestFeign {
@GetMapping(value = "/getTest")
String getTest();
}
1.6 创建FeignFallbackFactory类(Feign调用失败走此类方法)
package com.customer.feign;
import feign.hystrix.FallbackFactory;
@Component
public class TestFeignFallback implements FallbackFactory<TestFeign> {
@Override
public TestFeign create(Throwable throwable) {
return new TestFeign() {
@Override
public String getTest() {
return "调用失败:" + throwable.getMessage();
}
};
}
}
1.7 配置文件开启Feign日志
#开启Feign日志
logging.level.com.customer.feign.* = DEBUG
1.8 启动Eureka注册中心服务 8900、PROVIDER-SERVER提供者服务 8901、CUSTOMER-SERVER消费者服务 8902
访问Eureka注册中心服务地址:http://localhost:8900
1.9 浏览器访问消费者服务接口 http://localhost:8902/getTest
查看浏览器返回结果 和 控制台信息
浏览器和控制台均显示返回成功,Feign调用远程服务成功。
二、Feign的4种日志级别格式 进行逐一测试
@Configuration
public class FeignConfiguration {
/**
* 日志level有4个级别
* 1.NONE,不记录任何日志
* 2.BASIC,仅记录请求方法、URL以及响应状态码和执行时间:
* 3.HEADRES,除了BASIC以外的还会记录请求和响应的头信息
* 4.FULL,所有
*/
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.BASIC;
}
}
2.1 第一种 NONE 不记录任何日志
2.2 第二种 BASIC 仅记录请求方法、URL以及响应状态码和执行时间
2.3 第三种 HEADRES,除了BASIC以外的还会记录请求和响应的头信息
2.4 第四种 FULL 所有
2.5 此时服务消费者整合(Feign)进行远程调用服务就完成了。