专栏首页A周立SpringCloud跟我学Spring Cloud(Finchley版)-18-Zuul深入

跟我学Spring Cloud(Finchley版)-18-Zuul深入

本节探讨Zuul的高级特性。

TIPS: 公众号已更新不少Zuul相关的文章,对于已经写过的内容,就不再啰嗦一遍了,直接贴地址吧。

过滤器详解

过滤器是Zuul的核心,Zuul大多功能都是基于过滤器实现的。详见:Spring Cloud Zuul过滤器详解 ,文章着重探讨了Zuul过滤器的生命周期、如何自定义过滤器、如何禁用指定过滤器等。

内置过滤器详解

Zuul内置了很多过滤器,这些过滤器帮助我们实现各种能力,来分析一下内置过滤器有哪些,分别是干嘛的。

为Zuul提供回退

跟我学Spring Cloud(Finchley版)-16-Zuul 讲过,Zuul整合了Hystrix,而Hystrix提供fallback的能力。

前文已详细讲过通用方式提供fallback、Feign提供fallback。如果不记得如何提供Fallback,可前往如下文章复习。

  • 跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix
  • 跟我学Spring Cloud(Finchley版)-14-Feign使用Hystrix
/**
 * @author itmuch.com
 */
@Component
public class MyFallbackProvider implements FallbackProvider {
  @Override
  public String getRoute() {
    // 表明是为哪个微服务提供回退,*表示为所有微服务提供回退
    return "*";
  }

  @Override
  public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
    if (cause instanceof HystrixTimeoutException) {
      return response(HttpStatus.GATEWAY_TIMEOUT);
    } else {
      return this.fallbackResponse();
    }
  }

  public ClientHttpResponse fallbackResponse() {
    return this.response(HttpStatus.INTERNAL_SERVER_ERROR);
  }

  private ClientHttpResponse response(final HttpStatus status) {
    return new ClientHttpResponse() {
      @Override
      public HttpStatus getStatusCode() throws IOException {
        return status;
      }

      @Override
      public int getRawStatusCode() throws IOException {
        return status.value();
      }

      @Override
      public String getStatusText() throws IOException {
        return status.getReasonPhrase();
      }

      @Override
      public void close() {
      }

      @Override
      public InputStream getBody() throws IOException {
        return new ByteArrayInputStream("服务不可用,请稍后再试。".getBytes());
      }

      @Override
      public HttpHeaders getHeaders() {
        // headers设定
        HttpHeaders headers = new HttpHeaders();
        MediaType mt = new MediaType("application", "json", Charset.forName("UTF-8"));
        headers.setContentType(mt);
        return headers;
      }
    };
  }
}

这样,当Zuul后端服务发生异常时,就会进到该Fallback类,并返回 服务不可用,请稍后再试。

高可用

详见:Zuul的高可用

实战技巧

  • 如何配置Zuul的Hystrix线程池
  • Spring Cloud限流详解(附源码) ,里面谈到基于Zuul的限流。

其他

虽然是基于Edgware写的,但Finchley版本依然适用。

  • Spring Cloud Edgware新特性之四:Zuul routes端点功能增强
  • Spring Cloud Edgware新特性之五:filters端点

本文分享自微信公众号 - IT牧场(itmuch_com),作者:周立

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Cloud Edgware新特性之八:Zuul回退的改进

    Spring Cloud Edgware对Hystrix回退的逻辑进行了一些改进。本文将信息探讨新旧版本的回退操作,并分析的原因及改进后的优势。 Dalston...

    用户1516716
  • 谈谈 Spring 中的 AutowireCandidateResolver

    用户1516716
  • 精选IDEA中十大提高开发效率的插件!

    当你进行对象之间赋值的时候,你会发现好麻烦呀,能不能有一个更好的办法呢~ 有,只要你选中需要生成set方法的对象,按下快捷键 alt+enter 界面如下:

    用户1516716
  • java之struts2的action优化配置

    当一个Action处理类中处理多个业务时,action的配置 文件将会急剧增加,导致配置文件很臃肿的问题。

    Vincent-yuan
  • ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

    ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效。如果我们能...

    蒋金楠
  • android 使用okhttp可能引发OOM的一个点

    遇到一个问题: 需要给所有的请求加签名校验以防刷接口;传入请求url及body生成一个文本串作为一个header传给服务端;已经有现成的签名检验方法String...

    砸漏
  • Shiro安全框架【快速入门】就这一篇!

    简而言之,Apache Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理。

    Java3y
  • 面试编程题1:充分利用已知的计算条件

    上篇说到,要想在面试中处于不败之地,不能靠简单的刷题,而是要学会分析题目,尽可能找出内在规律,思维要敏捷。要想达到这种功力,需要平时多注意进行有意识的训练总结。

    double
  • POJ 刷题系列:1503 Integer Inquiry

    POJ 刷题系列:1503 Integer Inquiry 传送门:POJ 1503 Integer Inquiry 题意: 实现VeryLongIntege...

    用户1147447
  • Android实现类似QQ对话框的@他人的整体解决方案

    在我们公司的新版APP中社区板块有个在回复回帖中有个@他们的功能,基本需求和QQ群组对话框里@群或组里任何一个成员类似。而数据传输方面,选择了直接传输富文本格式...

    1025645

扫码关注云+社区

领取腾讯云代金券