当我们对网关进行配置让其调用集群的服务时,将会执行 Ribbon 路由过滤器,该过滤器在进行转发时会封装为一个 Hystrix 命令予以执行,Hystrix 命令具有容错的功能,如果"源服务"出现问题(例如超时),那边所执行的 Hystrix 命令将会触发回退,我们需要实现 org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider 接口,该接口主要需要实现 getRoute 方法 、fallbackResponse 方法,getRoute 方法主要返回路由的名称,用于匹配 Hystrix 回退方法的路由;fallbackResponse 方法主要返回回退的返回信息,示例代码如下:

  • 回退方法类

    实现了 getRoute 方法,返回 HELLOWORLD-PROVIDER 表示该回退类,用于 HELLOWORLD-PROVIDER 服务,实现了 fallbackResponse 方法,表示回退方法返回的具体内容

    package org.lixue.zuul;

     
     

    import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;

    import org.springframework.http.HttpHeaders;

    import org.springframework.http.HttpStatus;

    import org.springframework.http.MediaType;

    import org.springframework.http.client.ClientHttpResponse;

     
     

    import java.io.ByteArrayInputStream;

    import java.io.IOException;

    import java.io.InputStream;

     
     

    public class HelloWorldFallback implements ZuulFallbackProvider{

    @Override

    public String getRoute(){

    return"HELLOWORLD-PROVIDER";

    }

     
     

    @Override

    public ClientHttpResponse fallbackResponse(){

    return new ClientHttpResponse(){

    @Override

    public HttpStatus getStatusCode()throwsIOException{

    return HttpStatus.OK;

    }

     
     

    @Override

    public int getRawStatusCode()throwsIOException{

    return HttpStatus.OK.value();

    }

     
     

    @Override

    public String getStatusText()throwsIOException{

    returnH ttpStatus.OK.toString();

    }

     
     

    @Override

    public void close(){

     
     

    }

     
     

    @Override

    public InputStream getBody() throws IOException{

    return new ByteArrayInputStream("fallback".getBytes());

    }

     
     

    @Override

    public HttpHeaders getHeaders(){

    HttpHeaders headers=new HttpHeaders();

    headers.setContentType(MediaType.TEXT_PLAIN);

    return headers;

    }

    };

    }

    }

     
     

  • Zuul 配置类

    创建配置类,在配置类中创建回退类的实例 Bean 即可

    package org.lixue.zuul;

     
     

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

     
     

    @Configuration

    public class ZuulFallbackConfiguration{

     
     

    @Bean

    public HelloWorldFallback helloWorldFallback(){

    return new HelloWorldFallback();

    }

    }

     
     

  • 增加路由配置

    #配置应用名称

    spring:

    application:

    name:spring-cloud-zuul-microservices

    #服务端口

    server:

    #设置eureka服务注册中心的地址,如果多个以逗号分割

    eureka:

    client:

    service-url:

    #defaultZone表示默认的区域的eureka服务地址,多个使用逗号分割

    defaultZone:http://eurekaserver01:9000/eureka/

     
     

    #zuul路由配置

    zuul:

    routes:

    hello:

    path:/hello/**

    serviceId:HELLOWORLD-PROVIDER

     
     

  • 测试验证

    该项目依赖一个 eureka-sserver、service-provider 服务,首先启动 eureka-server 和 service-provider 服务,然后启动 spring-cloud-zuul-microservices 服务,访问 http://localhost:9200/hello/speaks?names=123 地址,可以看到能正常返回,如下:

    {"123":"Hello World 123 Port=8080"}

    此时,关闭 service-provider 服务,再次访问,可以看到已经无法访问 service-provider 服务了,返回的是回退方法的数据,如下:

    fallback

Spring Cloud(Dalston.SR5)--Zuul 网关-Hystrix 回退的更多相关文章

  1. Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群

    通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...

  2. Spring Cloud(Dalston.SR5)--Zuul 网关

    我们使用 Spring Cloud Netflix 中的 Eureka 实现了服务注册中心以及服务注册与发现:而服务间通过 Ribbon 或 Feign 实现服务的消费以及均衡负载:使用Hystrix ...

  3. Spring Cloud(Dalston.SR5)--Zuul 网关-过滤器

    Spring Cloud 为 HTTP 请求的各个阶段提供了多个过滤器,这些过滤器的执行顺序由各自提供的一个 int 值决定,提供的值越小则优先级越高,默认的过滤器及优先级如下: 自定义过滤器 在默认 ...

  4. Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置

    Spring Cloud 在 Zuul 的 routing 阶段实现了几个过滤器,这些过滤器决定如何进行路由工作. 简单路由(SimpleHostRoutingFilter) 该过滤器运行后,会将 H ...

  5. Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合

    创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...

  6. Spring Cloud(Dalston.SR5)--Hystrix 断路器

    Spring Cloud 对 Hystrix 进行了封装,使用 Hystrix 是通过 @HystrixCommand 注解来使用的,被 @HystrixCommand 注解标注的方法,会使用 Asp ...

  7. Spring Cloud(Dalston.SR5)--Hystrix 监控

    在服务调用者加入 Actuator ,可以对服务调用者的健康情况进行实时监控,例如,断路器是否打开.当前负载情况等. 服务调用者 需要增加 actuator依赖, 修改 POM.xml 中增加以下依赖 ...

  8. Spring Cloud(Dalston.SR5)--Hystrix 断路器-缓存

    在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的缓存,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创建和 ...

  9. Spring Cloud(Dalston.SR5)--Hystrix 断路器-合并请求

    在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的合并请求,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创 ...

随机推荐

  1. appDesign

    1原则 简约,实用,懒人模式 2模块划分 以实用目的,而非以工具

  2. try与except处理异常语句

    ji 简介 与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错(python作为脚本语言没有编译的环节,在执行过程中对语法进行检测, ...

  3. linux存储管理之逻辑卷

    LVM管理 ====================================================================================创建LVMVG扩展/ ...

  4. php-parser在Aop编程中的使用

    在laravel下使用php-parser实现aop composer require nikic/php-parser Test.php <?php /** * Created by PhpS ...

  5. Android之Fragment(碎片)方方面面

    Fragment简介碎片(Fragment)是一种可以嵌入到活动当中的UI片段,它能让程序更加合理和充分的利用大屏幕的空间. Fragment的生命周期 它与Activity生命周期的关系: 可以看到 ...

  6. Vue 结合 Axios 接口超时统一处理

    引语:当网路慢的时候.又或者公司服务器不在内地的时候,接口数据请求不回来超时报错的情况相信大家肯定遇到过的,这里我把我公司项目请求超时的处理方法分享下,希望看过后有帮助. axios基本用法就不多说了 ...

  7. 公网IP被别人恶意解析的后果

    在网上看的一个案例,说是自己网站的IP被别的域名恶意解析了,恶意网站没有备案,IP地址为没有备案的域名提供了正常的网站服务,导致对应的IP也被封了. 检查方法:telnet xxx.me 80端口不通 ...

  8. 一个简易的allocator

    #include <vector> #include <iostream> #include <algorithm> using namespace::std; t ...

  9. linux下的mysql

    1.到下面地址下载通用二进制包 wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.53-linux2.6-x86_64.tar.gz 2.具 ...

  10. Python基础01_介绍_HelloWorld

    首先,当然是python的版本了,老师讲课学习都是以python3为主, 我的centos中还是python2.6.6 然后参照老师的教程升级到了2.7.14 谢谢! 平时主要练习3的,有时间的情况下 ...