springcloud Feign断路器实战和问题总结
断路由是防止该服务调用其他外服务时,外服务宕机或者出差时,影响到本服务的宕机,引起大面积的瘫痪,所以才有了断路由的由来。
springcloud Feign已经实现了Hystrix ,所以不用再引Hystrix的maven依赖
1. 搭建一个eureka注册中心和service参考下面的文章
2. 创建项目如下
2.1 pom 文件
-
<?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.xue</groupId>
-
<artifactId>spring-curstomA</artifactId>
-
<version>0.0.1-SNAPSHOT</version>
-
<packaging>jar</packaging>
-
<name>spring-curstomA</name>
-
<description>Demo project for Spring Boot</description>
-
<parent>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-parent</artifactId>
-
<version>1.5.9.RELEASE</version>
-
<relativePath/> <!-- lookup parent from repository -->
-
</parent>
-
<properties>
-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
<java.version>1.8</java.version>
-
</properties>
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter</artifactId>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-config</artifactId>
-
</dependency>
-
<!-- sping cloud 注册服务 -->
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-eureka</artifactId>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-test</artifactId>
-
<scope>test</scope>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-feign</artifactId>
-
</dependency>
-
</dependencies>
-
<dependencyManagement>
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-dependencies</artifactId>
-
<version>Dalston.RELEASE</version>
-
<type>pom</type>
-
<scope>import</scope>
-
</dependency>
-
</dependencies>
-
</dependencyManagement>
-
<build>
-
<plugins>
-
<plugin>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-maven-plugin</artifactId>
-
</plugin>
-
</plugins>
-
</build>
-
</project>
2.2 application.properties配置文件
-
#服务名称
-
spring.application.name=ribbon-consumer
-
#端口号
-
server.port=5555
-
#注册中心
-
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
-
spring.cloud.config.discovery.enabled=true
-
#注册中心的服务id
-
spring.cloud.config.discovery.serviceId=compute-server
-
#打开对Hystrix断路由
-
feign.hystrix.enabled=true
2.3 启动类注解
-
@SpringBootApplication
-
@EnableEurekaClient
-
@EnableFeignClients
-
public class SpringCurstomAApplication {
-
public static void main(String[] args) {
-
SpringApplication.run(SpringCurstomAApplication.class, args);
-
}
-
}
2.4 controller层
-
@RestController
-
public class MyController {
-
@Autowired
-
HelloService service;
-
@RequestMapping("/feign-customer")
-
public String testA() {
-
return service.hello();
-
}
-
}
2.5 feign 接口
-
//服务名 和回调类
-
@FeignClient(value="COMPUTE-SERVICE1",fallback=HelloServiceFallback.class)
-
public interface HelloService {
-
@RequestMapping("/info") //对应具体服务中的接口地址(具体服务controller 层的暴露接口)可以指定具体的get/post
-
String hello();
-
}
2.6 feign 实现类
-
@Component//该注解不能少,否则报错
-
public class HelloServiceFallback implements HelloService {
-
@Override
-
public String hello() {
-
return "request error";
-
}
-
}
效果 把要调用的服务停止后 如下图
总结
如果项目还是报错,要检查三个地方
1. pom文件
-
<dependencyManagement>
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-dependencies</artifactId>
-
<version>Dalston.RELEASE</version>//一定要是Dalston 不能是 Brixton
-
<type>pom</type>
-
<scope>import</scope>
-
</dependency>
-
</dependencies>
-
</dependencyManagement>
2. application.properties
-
#打开对Hystrix断路由
-
feign.hystrix.enabled=true
3. 启动类注解
-
@SpringBootApplication
-
@EnableEurekaClient
-
@EnableFeignClients//该注解不能少
-
public class SpringCurstomAApplication {
-
public static void main(String[] args) {
-
SpringApplication.run(SpringCurstomAApplication.class, args);
-
}
-
}