springcloud Feign断路器实战和问题总结

springcloud Feign断路器实战和问题总结

    断路由是防止该服务调用其他外服务时,外服务宕机或者出差时,影响到本服务的宕机,引起大面积的瘫痪,所以才有了断路由的由来。

springcloud Feign已经实现了Hystrix ,所以不用再引Hystrix的maven依赖

1. 搭建一个eureka注册中心和service参考下面的文章

    springcloud项目实战

2. 创建项目如下

    2.1 pom 文件

   

 
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  4. <modelVersion>4.0.0</modelVersion>

  5.  
  6. <groupId>com.xue</groupId>

  7. <artifactId>spring-curstomA</artifactId>

  8. <version>0.0.1-SNAPSHOT</version>

  9. <packaging>jar</packaging>

  10.  
  11. <name>spring-curstomA</name>

  12. <description>Demo project for Spring Boot</description>

  13.  
  14. <parent>

  15. <groupId>org.springframework.boot</groupId>

  16. <artifactId>spring-boot-starter-parent</artifactId>

  17. <version>1.5.9.RELEASE</version>

  18. <relativePath/> <!-- lookup parent from repository -->

  19. </parent>

  20.  
  21. <properties>

  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

  24. <java.version>1.8</java.version>

  25. </properties>

  26.  
  27. <dependencies>

  28. <dependency>

  29. <groupId>org.springframework.boot</groupId>

  30. <artifactId>spring-boot-starter</artifactId>

  31. </dependency>

  32. <dependency>

  33. <groupId>org.springframework.cloud</groupId>

  34. <artifactId>spring-cloud-starter-config</artifactId>

  35. </dependency>

  36. <!-- sping cloud 注册服务 -->

  37. <dependency>

  38. <groupId>org.springframework.cloud</groupId>

  39. <artifactId>spring-cloud-starter-eureka</artifactId>

  40. </dependency>

  41. <dependency>

  42. <groupId>org.springframework.boot</groupId>

  43. <artifactId>spring-boot-starter-test</artifactId>

  44. <scope>test</scope>

  45. </dependency>

  46. <dependency>

  47. <groupId>org.springframework.boot</groupId>

  48. <artifactId>spring-boot-starter-web</artifactId>

  49. </dependency>

  50. <dependency>

  51. <groupId>org.springframework.cloud</groupId>

  52. <artifactId>spring-cloud-starter-feign</artifactId>

  53. </dependency>

  54. </dependencies>

  55.  
  56. <dependencyManagement>

  57. <dependencies>

  58. <dependency>

  59. <groupId>org.springframework.cloud</groupId>

  60. <artifactId>spring-cloud-dependencies</artifactId>

  61. <version>Dalston.RELEASE</version>

  62. <type>pom</type>

  63. <scope>import</scope>

  64. </dependency>

  65. </dependencies>

  66. </dependencyManagement>

  67.  
  68. <build>

  69. <plugins>

  70. <plugin>

  71. <groupId>org.springframework.boot</groupId>

  72. <artifactId>spring-boot-maven-plugin</artifactId>

  73. </plugin>

  74. </plugins>

  75. </build>

  76.  
  77.  
  78. </project>

    2.2 application.properties配置文件

 
  1. #服务名称

  2. spring.application.name=ribbon-consumer

  3. #端口号

  4. server.port=5555

  5. #注册中心

  6. eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

  7. spring.cloud.config.discovery.enabled=true

  8. #注册中心的服务id

  9. spring.cloud.config.discovery.serviceId=compute-server

  10. #打开对Hystrix断路由

  11. feign.hystrix.enabled=true

    2.3 启动类注解

 
  1. @SpringBootApplication

  2. @EnableEurekaClient

  3. @EnableFeignClients

  4. public class SpringCurstomAApplication {

  5.  
  6. public static void main(String[] args) {

  7. SpringApplication.run(SpringCurstomAApplication.class, args);

  8. }

  9. }

    2.4 controller层

 
  1. @RestController

  2. public class MyController {

  3. @Autowired

  4. HelloService service;

  5.  
  6. @RequestMapping("/feign-customer")

  7. public String testA() {

  8. return service.hello();

  9. }

  10. }

    2.5 feign 接口

 
  1. //服务名 和回调类

  2. @FeignClient(value="COMPUTE-SERVICE1",fallback=HelloServiceFallback.class)

  3. public interface HelloService {

  4.  
  5. @RequestMapping("/info") //对应具体服务中的接口地址(具体服务controller 层的暴露接口)可以指定具体的get/post

  6. String hello();

  7. }

    2.6 feign 实现类

 
  1. @Component//该注解不能少,否则报错

  2. public class HelloServiceFallback implements HelloService {

  3.  
  4. @Override

  5. public String hello() {

  6. return "request error";

  7. }

  8. }

效果 把要调用的服务停止后 如下图

总结

如果项目还是报错,要检查三个地方

1. pom文件

 
  1.         <dependencyManagement>

  2. <dependencies>

  3. <dependency>

  4. <groupId>org.springframework.cloud</groupId>

  5. <artifactId>spring-cloud-dependencies</artifactId>

  6. <version>Dalston.RELEASE</version>//一定要是Dalston 不能是 Brixton

  7. <type>pom</type>

  8. <scope>import</scope>

  9. </dependency>

  10. </dependencies>

  11. </dependencyManagement>

2. application.properties

 
  1. #打开对Hystrix断路由

  2. feign.hystrix.enabled=true

3. 启动类注解

 
  1. @SpringBootApplication

  2. @EnableEurekaClient

  3. @EnableFeignClients//该注解不能少

  4. public class SpringCurstomAApplication {

  5.  
  6. public static void main(String[] args) {

  7. SpringApplication.run(SpringCurstomAApplication.class, args);

  8. }

  9. }

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/84451607