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:
#设置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 回退的更多相关文章
- Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...
- Spring Cloud(Dalston.SR5)--Zuul 网关
我们使用 Spring Cloud Netflix 中的 Eureka 实现了服务注册中心以及服务注册与发现:而服务间通过 Ribbon 或 Feign 实现服务的消费以及均衡负载:使用Hystrix ...
- Spring Cloud(Dalston.SR5)--Zuul 网关-过滤器
Spring Cloud 为 HTTP 请求的各个阶段提供了多个过滤器,这些过滤器的执行顺序由各自提供的一个 int 值决定,提供的值越小则优先级越高,默认的过滤器及优先级如下: 自定义过滤器 在默认 ...
- Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置
Spring Cloud 在 Zuul 的 routing 阶段实现了几个过滤器,这些过滤器决定如何进行路由工作. 简单路由(SimpleHostRoutingFilter) 该过滤器运行后,会将 H ...
- Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合
创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...
- Spring Cloud(Dalston.SR5)--Hystrix 断路器
Spring Cloud 对 Hystrix 进行了封装,使用 Hystrix 是通过 @HystrixCommand 注解来使用的,被 @HystrixCommand 注解标注的方法,会使用 Asp ...
- Spring Cloud(Dalston.SR5)--Hystrix 监控
在服务调用者加入 Actuator ,可以对服务调用者的健康情况进行实时监控,例如,断路器是否打开.当前负载情况等. 服务调用者 需要增加 actuator依赖, 修改 POM.xml 中增加以下依赖 ...
- Spring Cloud(Dalston.SR5)--Hystrix 断路器-缓存
在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的缓存,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创建和 ...
- Spring Cloud(Dalston.SR5)--Hystrix 断路器-合并请求
在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的合并请求,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创 ...
随机推荐
- Linux 独立启动方式安装 Archiva
为了方便起见,我们假设你的 archiva 安装到目录 /opt 下面. 下载安装程序 进入 Archiva 的项目的下载页面中,请单击链接:https://archiva.apache.org/do ...
- K-临近算法(KNN)
K-临近算法(KNN) K nearest neighbour 1.k-近邻算法原理 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类. 优点:精度高.对异常值不敏感.无数据输入假定. ...
- php 连接oracle 导出百万级数据
1,我们一般做导出的思路就是,根据我们想要的数据,全部查询出来,然后导出来,这个对数据量很大的时候会很慢,这里我提出来的思想就是分页和缓冲实现动态输出. 2.普通的我就不说了,下面我说一下分页和内存刷 ...
- java中的线程问题(二)——线程的创建和用法。
在java中一个类要当作线程来使用有两种方法. 1.继承Thread类,并重写run函数 2.实现Runnable接口,并重写run函数 因为java是单继承的,在某些情况下一个类可能已经继承了某个父 ...
- 团队项目(MVP------新能源汽车无线充电管理网站)(个人任务1)
个人任务:1.设计问卷调查了解电动车目前的市场需求情况 2.收集问卷,并且进行总结和分析 3.后台管理系统界面的登录和注册界面的编写(主要用到html,css,javascript,其中用户的合法性检 ...
- 近期面试总结(Android)
关于近期面试总结(2018年下半年) 有些是老生常谈有些是没有遇到的. 1.HTTP和HTTPS的区别 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为 ...
- Css3新属性:calc()
一.前言 calc()看起来像是javascript中的一个函数,而事实上它是用在Css中的,可以用它来计算长度(宽度或高度),能够自动根据不同尺寸的屏幕自动调接数值,从而很轻松的实现自适应布局展示在 ...
- Git常用指令和GitHub操作总结
Git版本管理工具(CVS) 首先粘上两个Git的基础链接~ 阮一峰:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 廖雪峰:h ...
- ecmall 移动端 微信分享
/* 用户判断是否在微信端 */ $this->assign('isWeixin', isWeixin()); //isWeixin() 在系统核心基础类的ecmall.php里定义好了 是微信 ...
- 项目三(2)——person与学生
编程实现Person类,学生类的设计及其继承关系 (同第六章课后第三题) class Person{ private String name; private String addr; private ...