feign配置接《spingcloud(hystrix的配置)(二)》
- 创建新的项目xym-service-customer2
- 配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xym</groupId>
<artifactId>xym-service-customer2</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 启动类的配置
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class XymServiceCustomer2 {
public static void main(String[] args) {
SpringApplication.run(XymServiceCustomer2.class,args);
}
}
- 配置feign的客户端
@FeignClient(serviceId = "service-provide")
public interface UserClient {
@GetMapping("/user/{id}")
User queryById(@PathVariable("id")Long id);
}
- 调用方的代码
@RestController
@RequestMapping("customer")
public class UserController {
@Autowired
private UserClient userClient;
@GetMapping("{id}")
public String queryUserById(@PathVariable("id")Long id){
return userClient.queryById(id).toString();
}
}
- 添加hystrix的支持
feign:
hystrix:
enabled: true # 开启Feign的熔断功能
- 配置熔断的类
@FeignClient(serviceId = "service-provide",fallback = UserClientFallBack.class)
public interface UserClient {
@GetMapping("/user/{id}")
User queryById(@PathVariable("id")Long id);
}
//实际熔断的类
@Component
public class UserClientFallBack implements UserClient{
@Override
public User queryById(Long id) {
User u = new User();
u.setUsername("回滚了");
return u;
}
}
- 运行效果
- 启动feign的日志
- 配置日志级别
logging:
level:
com.xym: debug
- 配置启动日志类
@Configuration
public class FeignLogConfiguration {
@Bean //bean的名称一定要对上
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
//feign客户端的配置
@FeignClient(serviceId = "service-provide",fallback = UserClientFallBack.class,configuration = FeignLogConfiguration.class)
public interface UserClient {
@GetMapping("/user/{id}")
User queryById(@PathVariable("id")Long id);
}
- 开启feign的请求和相应的压缩的支持
feign:
compression:
request:
enabled: true # 开启请求压缩
mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
min-request-size: 2048 # 设置触发压缩的大小下限
response:
enabled: true