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

为什么80%的码农都做不了架构师?>>>   hot3.png

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

Dalston及更低版本

对于Dalston及更低版本,要想为Zuul提供回退,只需编写代码如下:

@Component
public class MyFallbackProvider implements ZuulFallbackProvider {@Overridepublic String getRoute() {// 表明是为哪个微服务提供回退,*表示为所有微服务提供回退return "*";}@Overridepublic ClientHttpResponse fallbackResponse() {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {// fallback时的状态码return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {// 数字类型的状态码,本例返回的其实就是200,详见HttpStatusreturn this.getStatusCode().value();}@Overridepublic String getStatusText() throws IOException {// 状态文本,本例返回的其实就是OK,详见HttpStatusreturn this.getStatusCode().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;}};}
}

Edgware及更高版本

@Component
public class MyFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {// 表明是为哪个微服务提供回退,*表示为所有微服务提供回退return "*";}@Overridepublic ClientHttpResponse fallbackResponse(Throwable cause) {if (cause instanceof HystrixTimeoutException) {return response(HttpStatus.GATEWAY_TIMEOUT);} else {return this.fallbackResponse();}}@Overridepublic 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;}};}
}

分析

由代码可知:

  • Dalston及更低版本通过实现ZuulFallbackProvider 接口,从而实现回退;
  • Edgware及更高版本通过实现FallbackProvider 接口,从而实现回退。
  • 在Edgware中:
    • FallbackProvider是ZuulFallbackProvider的子接口。
    • ZuulFallbackProvider已经被标注Deprecated ,很可能在未来的版本中被删除。
    • FallbackProvider接口比ZuulFallbackProvider多了一个ClientHttpResponse fallbackResponse(Throwable cause); 方法,使用该方法,可获得造成回退的原因。
  • 笔者将在下一篇文章详细总结在Spring Cloud中如何获得造成回退原因的各种姿势。

转载于:https://my.oschina.net/eacdy/blog/1609309

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea插件导出_Intellij IDEA 中我一直在用的几个插件

提前声明一下,今天这篇文章是在我家的那台 Mac 机子上写的,但是文中使用的快捷键还是主要针对于 Windows 平台「由于我的大多数读者在使用该系统,我是有多么爱你们~~~」。接上一篇《谈谈我与 Intellij IDEA…

Python基础学习五 内置模块

time 模块 1 >>> import time2 >>> time.time()3 1491064723.8086694 >>> # time.time()返回当前时间的时间戳timestamp(定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数)的方法,无参数5 >>> time.asctime()6 Sun Apr 2…

Sublime Text3使用Package Control 报错There Are No Packages Available For Installation

在使用sublime时,有时候我们希望将代码复制出来后仍然是高亮显示,这样我们便需要安装SublimeHighLight插件,在安装SublimeHighLight插件之前,我们应该先安装Package Control插件! 1、Package Control插件作用&#xff…

2018-1-27:内存的划分

内存的划分 1.寄存器 2.本地方法区 3.方法区 4.栈内存 存储的都是局部变量,变量的作用域一结束,该变量就立即释放 5.堆内存 存储的是对象,即凡是new的都在堆中 特点:   1.每一个实体都有首地址 2.堆内存中每一个变量都有默认初始…

线程2---异步1

在Java中什么是同步?什么是异步?对于这两个概念我们必须要明确。只有明确这两个概念,才会在明确在什么场景下使用同步以及异步。 在这里我可以形象的举个例子来辨明这两个概念: 1.同步与异步同步和异步关注的是消息通信机制 (sync…

mysql通常使用语句_Mysql 常用SQL语句集锦

基础篇//查询时间,友好提示$sql "select date_format(create_time, %Y-%m-%d) as day from table_name";//int 时间戳类型$sql "select from_unixtime(create_time, %Y-%m-%d) as day from table_name";//一个sql返回多个总数$sql "sel…

为什么你需要设计和维护一套自我移动标准?

在一个很长的调研日的休息时分,我在同一个客户谈一个项目,在这个项目中,我正为一个全球经济公司开发一个iOS标准。他们的第一反应是这样的:“什么?你在开发Apple iOS以外的标准?那还要开发什么?…

数据挖掘资料

https://blog.csdn.net/baimafujinji/article/details/53269040 在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on Data Mining),与会的各位专家选出了当时的十大数据挖掘算法( top 10 …

如何进行个人知识管理和提高自己能力?

21世纪是一个知识爆炸的世纪,知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…

redis服务器端和客户端启动

服务器端 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件 ps -ef|grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 连接特定IP的redis:

超级丑数

题目: 写一个程序来找第 n 个超级丑数。超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] 是前 12 个超级丑数。注意事项:…

为什么要进行个人知识管理(PKM)

21世纪是一个知识爆炸的世纪,知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…

NFC读卡------ci522

1、NFC及卡片 NFC是近距离无线通讯技术,是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。 …

mysql 索引效果是否叠加_MySQL基础实用知识集合(二)

上期小编给大家汇总介绍了mysql的6个基础的知识点,下面继续给大家分享一下另外7个知识点:7、什么是死锁?怎么解决?死锁:两个或多个事务相互占用了对方的锁,就会一直处于等待的状态。常见的解决死锁的方法:(…

IP协议

IP协议只负责传送IP数据包,无法监视和控制网络中出现的一些问题,这些工作由Internet的控制协议来完成IP是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。它的特点如下:不可靠(u n r e…