本节探讨Zuul的高级特性。

TIPS:

笔者已经写过很多Zuul相关的文章,对于已经写过的内容,就不再啰嗦一遍了,直接贴地址吧。

过滤器详解

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

内置过滤器详解

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

详见:Spring Cloud内置的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 {@Overridepublic String getRoute() {// 表明是为哪个微服务提供回退,*表示为所有微服务提供回退return "*";}@Overridepublic 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() {@Overridepublic HttpStatus getStatusCode() throws IOException {return status;}@Overridepublic int getRawStatusCode() throws IOException {return status.value();}@Overridepublic String getStatusText() throws IOException {return status.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream("服务不可用,请稍后再试。".getBytes());}@Overridepublic 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端点

本文首发

http://www.itmuch.com/spring-cloud/finchley-18/

干货分享

转载于:https://blog.51cto.com/10180481/2347459

跟我学Spring Cloud(Finchley版)-18-Zuul深入相关推荐

  1. Spring Cloud Finchley版中Consul多实例注册的问题处理

    由于Spring Cloud对Etcd的支持一直没能从孵化器中出来,所以目前来说大多用户还在使用Eureka和Consul,之前又因为Eureka 2.0不在开源的消息,外加一些博眼球的标题党媒体使得 ...

  2. hystrix 全局熔断_跟我学Spring Cloud(Finchley版)14Feign使用Hystrix

    Feign默认已经整合了Hystrix,本节详细探讨Feign使用Hystrix的具体细节. 服务降级 1 加配置,默认Feign是不启用Hystrix的,需要添加如下配置启用Hystrix,这样所有 ...

  3. 跟我学Spring Cloud(Finchley版)-10-Feign深入

    上一节( 跟我学Spring Cloud(Finchley版)-09-Feign )讲了Feign的入门姿势并深入对比了RestTemplate,本节来深入探讨Feign的高级特性.总的来说,Feig ...

  4. 跟我学Spring Cloud(Finchley版)-07-Ribbon入门

    经过前文讲述,我们已经实现了服务发现.本节来解决 跟我学Spring Cloud(Finchley版)-02-构建分布式应用 提到的如下问题: 负载均衡如何考虑?难道得在电影微服务和用户微服务之间加个 ...

  5. 跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析

    为什么80%的码农都做不了架构师?>>>    第2节( 跟我学Spring Cloud(Finchley版)-02-构建分布式应用 )说过: 地址硬编码问题--电影微服务中将用户微 ...

  6. 跟我学Spring Cloud(Finchley版)-16-Zuul

    为什么80%的码农都做不了架构师?>>>    至此,已实现基于Eureka的服务发现,基于Ribbon的负载均衡,Feign也为我们提供了很不错的远程调用能力,使用Hystrix后 ...

  7. 告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目(实际项目开发的浓缩精华版)

    告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目 一.前言 二.如何选择版本 2.1 SpringCloud 和 Spring Boot 版本选型 2.1. ...

  8. 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)

    在微服务项目中,一个系统可以分割成很多个不同的服务模块,不同模块之间我们通常需要进行相互调用.springcloud中可以使用RestTemplate+Ribbon和Feign来调用(工作中基本都是使 ...

  9. Spring Cloud Finchley OpenFeign的重试配置相关的坑

    如题,本文基于Spring Cloud Finchley.SR2 OpenFeign的重试 OpenFeign配置重试后,逻辑分析 对比Daltson和Finchley的基本组件,发现Ribbon还有 ...

  10. Spring Cloud(四) API网关Zuul

    前文回顾: Spring Cloud(一)Eureka Server-单体及集群搭建 Spring Cloud(二) 配置Eureka Client Spring Cloud(三) 熔断器Hystri ...

最新文章

  1. 在ROS使用奥比中光Orbbec Astra Pro
  2. react router 路由守卫_react实现hash路由
  3. Page_Load Page_Init方法使用原理(转)
  4. TypeScript入门-接口
  5. Andorid之bitmap里面的压缩总结
  6. 修改eclipse皮肤
  7. 设计模式学习笔记——观察者(Observer)模式
  8. 通过lvm方式扩展swap分区
  9. Windows RDP远程桌面无密码账户
  10. vxworks系统是用c语言写的吗,VxWorks操作系统基本.doc
  11. redis 设置密码 和 redis.config文件
  12. WS2811单线传输三通道LED驱动控制专用芯片
  13. 守望先锋中的netcode_如何跟踪守望先锋中的化妆品和事件物品
  14. Android Studio 占C盘空间是什么原因?
  15. oracle判断不是null,oracle中判断不为null
  16. 相关性搜索(自然语言处理NLP)相关资料(待更
  17. kali_上传_腾讯云_搭建kali
  18. Java操作Excel电子表格
  19. 嵌入式学习DAY10 --- 封装子函数,GDB调试,gcc编译流程
  20. Graphics2d消除锯齿整理

热门文章

  1. React应用优化:避免不必要的render
  2. 从例图中学习思维导图的基本概念
  3. Oracle DBA手记3:数据库性能优化与内部原理解析
  4. 分块存储视图状态数据
  5. 博文视点官方blog正式开张~~~~~~~~~
  6. Python必知必会:Classethod与Staticmethod方法
  7. android 呼吸灯权限_Android 呼吸灯效果
  8. 7-2 通讯录的录入与显示 (10 分)
  9. Android Button 实现渐变背景色、外边框颜色、圆角弧度、点击变色(完整源码)
  10. ubuntu系统使用命令行播放MP3歌曲