版本:

  1. <properties>
  2. <spring-boot.version>2.1..RELEASE</spring-boot.version>
  3. <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
  4. </properties>

所需依赖:

  1.   
  1. <properties>
    <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
    </properties>
  2.  
  3. <parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.1.9.RELEASE</version>
    </parent>
  4.  
  5. <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-zuul</artifactId>
    </dependency>
    </dependencies>
  6.  
  7. <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>

配置文件:

  1. spring:
  2. application:
  3. name: zuul-gateway-fallback
  4.  
  5. server:
  6. port:
  7. eureka:
  8. client:
  9. service-url:
  10. defaultZone: http://root:admin@eureka1:8761/eureka/,http://root:admin@eureka2:8761/eureka/

熔断降级处理类:

  1. package cn.arebirth.fallback;
  2.  
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
  6. import org.springframework.http.HttpHeaders;
  7. import org.springframework.http.HttpStatus;
  8. import org.springframework.http.MediaType;
  9. import org.springframework.http.client.ClientHttpResponse;
  10. import org.springframework.stereotype.Component;
  11.  
  12. import java.io.ByteArrayInputStream;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.nio.charset.Charset;
  16.  
  17. @Component
  18. public class ProductProviderFallback implements FallbackProvider {
  19. private final Logger logger = LoggerFactory.getLogger(ProductProviderFallback.class);
  20.  
  21. /**
  22. * getRoute方法的返回值就是要监听的挂掉的微服务的名字
  23. * 如果需要所有服务都走这个熔断回退,则return "*" 或 return null
  24. *
  25. * @return
  26. */
  27. @Override
  28. public String getRoute() {
  29. return "*";
  30. }
  31.  
  32. /**
  33. * 当服务无法执行的时候,返回托底信息
  34. *
  35. * @param route
  36. * @param cause
  37. * @return
  38. */
  39. @Override
  40. public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
  41. logger.info("--> route:{}进行熔断降级", route);
  42. return new ClientHttpResponse() {
  43.  
  44. /**
  45. * ClientHttpResponse的fallback的状态码
  46. * @return
  47. * @throws IOException
  48. */
  49. @Override
  50. public HttpStatus getStatusCode() throws IOException {
  51. return HttpStatus.OK;
  52. }
  53.  
  54. /**
  55. * ClientHttpResponse的fallback的状态码
  56. * @return
  57. * @throws IOException
  58. */
  59. @Override
  60. public int getRawStatusCode() throws IOException {
  61. return this.getStatusCode().value();
  62. }
  63.  
  64. /**
  65. * ClientHttpResponse的fallback的状态码
  66. * @return
  67. * @throws IOException
  68. */
  69. @Override
  70. public String getStatusText() throws IOException {
  71. return this.getStatusCode().getReasonPhrase();
  72. }
  73.  
  74. /**
  75. * Close this response, freeing any resources created.
  76. */
  77. @Override
  78. public void close() {
  79.  
  80. }
  81.  
  82. /**
  83. * 设置响应体
  84. * @return
  85. * @throws IOException
  86. */
  87. @Override
  88. public InputStream getBody() throws IOException {
  89. String content = "商品服务不可用,请与管理员联系";
  90. return new ByteArrayInputStream(content.getBytes());
  91. }
  92.  
  93. /**
  94. * 设置响应头信息
  95. * @return
  96. */
  97. @Override
  98. public HttpHeaders getHeaders() {
  99. HttpHeaders headers = new HttpHeaders();
  100. MediaType mt = new MediaType("application", "json", Charset.forName("utf-8"));
  101. headers.setContentType(mt);
  102.  
  103. return headers;
  104. }
  105. };
  106. }
  107. }

启动类:

  1. package cn.arebirth;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
  6.  
  7. @SpringBootApplication
  8. @EnableZuulProxy
  9. public class ZuulGatewayFallbackApp {
  10. public static void main(String[] args) {
  11. SpringApplication.run(ZuulGatewayFallbackApp.class, args);
  12. }
  13. }

这是正常请求服务的情况下:

当把服务关闭的情况下:

SpringCloud Zuul2.X网关实现服务熔断降级(复制即用)的更多相关文章

  1. 【5】JMicro微服务-熔断降级

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl   1. 使用服务熔断降级特性,必须先启动Pubsub服务,服务监听服务,熔断器服务3个服务 先启动Pubsub及服务监听两 ...

  2. SpringCloud 中集成Sentinel+Feign实现服务熔断降级

    Sentine 1.背景 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳 ...

  3. dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级

    1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...

  4. SpringCloud之API网关与服务发现——Cloud核心组件实战入门及原理

    微服务发展历史 单体模式——>服务治理(服务拆分)——>微服务(细分服务)——>Segments(服务网格) 微服务 VS SOA 微服务:模块化.独立部署.异构化 SOA:共同的治 ...

  5. 聊聊微服务熔断降级Hystrix

    在现在的微服务使用的过程中,经常会遇到依赖的服务不可用,那么如果依赖的服务不可用的话,会导致把自己的服务也会拖死,那么就产生了熔断,熔断顾名思义就是当服务处于不可用的时候采取半开关的状态,达到一定数量 ...

  6. ASP.NET Core 微服务初探[2]:熔断降级之Polly

    当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...

  7. 玩转Spring Cloud之熔断降级(Hystrix)与监控

    本文内容导航目录: 前言:解释熔断降级一.搭建服务消费者项目,并集成 Hystrix环境 1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-h ...

  8. Sentinel熔断降级

    sentinel流量控制 Sentinel流量控制&服务熔断降级介绍 流量控制介绍 在这里我用景区的例子解释一下 一个旅游景点日接待游客数量为8K,8K以后的游客就无法买票进去景区. 对应编程 ...

  9. Spring-cloud微服务实战【七】:服务熔断与降级hystrix

      在之前的文章中,我们先后介绍了eureka,ribbon,feign,使用eureka集群的方式来保证注册中心的高可用,在eureka中使用ribbon进行负载均衡,使用feign接口替换手动编码 ...

随机推荐

  1. js中的宏任务与微任务

    如果你已经知道了js中存在宏任务和微任务,那么你一定已经了解过promise了.因为在js中promise是微任务的一个入口. 先来看一道题: setTimeout(function(){ conso ...

  2. Java判断字符串相等"=="和"equal"详解

    在初学Java时,可能会经常碰到下面的代码: public static void main(String[] args) { //两种声明方式,有所差别 String s1="hello& ...

  3. 华为云DevCloud为开发者提供高效智能的可信开发环境

    在HUAWEI CONNECT 2019期间,在华为云云服务开发者分论坛上,华为云布道师做了<CloudIDE:开发者的高效.智能的可信开发环境>专题演讲,主要介绍了华为云DevCloud ...

  4. 一条数据的HBase之旅,简明HBase入门教程4:集群角色

    [摘要] 本文主要介绍HBase与HDFS的关系,一些关键进程角色,以及在部署上的建议 HBase与HDFS 我们都知道HBase的数据是存储于HDFS里面的,相信大家也都有这么的认知: HBase是 ...

  5. mysql 授权用户 主从和备份

    1.授权用户 mysql -uroot -p123qqq...A                     进入数据库 grant   all     on     *.*     to   dc@&q ...

  6. Windows下利用IIS建立网站并实现局域网共享

    https://blog.csdn.net/qq_41485414/article/details/82754252 https://www.cnblogs.com/linuxprobe-sarah/ ...

  7. [TimLinux] docker CentOS7入门——服务(2)

    1. 服务含义 分布式应用中,应用的不同部分即称为“服务”,视频网站是一个分布式应用,包含有:数据的存储,视频的转码,前端展示等部分,对应的这些部分即称为相应的服务.docker平台中,定义.运行和扩 ...

  8. Python之数据分析工具包介绍以及安装【入门必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 首先我们来看 Mac版 按照需求大家依次安装,如果你还没学到数据分析,建议你 ...

  9. 各种常用js函数实现

    1.bind function bind(fn, context) {    var args = Array.prototype.slice.call(arguments, 2);    retur ...

  10. 【CSS】381- 提升你的CSS选择器技巧

    我已经使用CSS多年了,但直到最近我才深入研究了一下CSS选择器. 我为什么要这样做呢?我们都知道选择器,但麻烦的是随着时间的推移,很容易习惯于在每个项目中使用相同的可信任选择器来实现你需要做的事情. ...