zoukankan      html  css  js  c++  java
  • Spring Cloud(Dalston.SR5)--Zuul 网关-Hystrix 回退

    当我们对网关进行配置让其调用集群的服务时,将会执行 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:

      port:9200

      #设置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

  • 相关阅读:
    EF6 Code First 模式更新数据库架构
    bootstrap-datepicker 插件修改为默认中文
    常用网络资源下载
    jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件
    AngularJS实现原理
    [个人翻译]GitHub指导文件(GitHub Guides[Hello World])
    年后跳槽如何准备?
    前端学数据库之子查询
    Ionic实战 自动升级APP(Android版)
    读书笔记:《HTML5开发手册》Web表单
  • 原文地址:https://www.cnblogs.com/li3807/p/8916876.html
Copyright © 2011-2022 走看看