一、概述

  参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#hystrix-fallbacks-for-routes

  Zuul本事是基于Hystrix和Ribbon等,默认会支持Hystrix的Command等

  在Zuul给定的路由回路跳闸,可以通过创建一个类型为ZuulFallbackProvider的bean来提供回退响应。在此bean中,您需要指定回退的路由ID,并提供ClientHttpResponse作为回退。这是一个非常简单的ZuulFallbackProvider实现。

二、提供Hystrix路由回退

  当Zuul中给定路由的电路被触发时,您可以通过创建一个类型为ZuulFallbackProvider的bean来提供回退响应。在此bean中,您需要指定回退的路由ID,并提供ClientHttpResponse作为回退。这是一个非常简单的ZuulFallbackProvider实现。

class MyFallbackProvider implements ZuulFallbackProvider {
@Override
public String getRoute() {
return "customers";
} @Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
} @Override
public int getRawStatusCode() throws IOException {
return 200;
} @Override
public String getStatusText() throws IOException {
return "OK";
} @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.APPLICATION_JSON);
return headers;
}
};
}
}

路由配置

zuul:
routes:
customers: /customers/**

如果您希望为所有路由提供默认回退,则可以创建类型为ZuulFallbackProvider的bean,并让getRoute方法返回*或null

class MyFallbackProvider implements ZuulFallbackProvider {
@Override
public String getRoute() {
return "*";
} @Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
} @Override
public int getRawStatusCode() throws IOException {
return 200;
} @Override
public String getStatusText() throws IOException {
return "OK";
} @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.APPLICATION_JSON);
return headers;
}
};
}
}

如果您想选择基于故障原因的响应,请使用FallbackProvider,它将替换未来版本中的ZuulFallbackProvder。

class MyFallbackProvider implements FallbackProvider {

    @Override
public String getRoute() {
return "*";
} @Override
public ClientHttpResponse fallbackResponse(final Throwable cause) {
if (cause instanceof HystrixTimeoutException) {
return response(HttpStatus.GATEWAY_TIMEOUT);
} else {
return fallbackResponse();
}
} @Override
public ClientHttpResponse fallbackResponse() {
return 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("fallback".getBytes());
} @Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
};
}
}

都是

最新文章

  1. 从无到有实现登录功能以及thinkphp怎么配置数据库信息
  2. Web安全之SQL注入攻击技巧与防范
  3. ASP.NET MVC 中将FormCollection与实体间转换方法
  4. TN035: Using Multiple Resource Files and Header Files with Visual C++
  5. 从prompt输入10个人的年龄放入数组,将十个人的年龄求总和。
  6. Labview二进制文件的操作
  7. css笔记——区分css3中的transform transition animation
  8. Phpcms V9 所有的中文变量
  9. Qt用Zip压缩文件夹的一些坑
  10. 判断是否是IE9浏览器的最短语句 var ie=!-[1,]
  11. 解决Dynamics 365使用JS调用Web API时报no property value was found in the payload 错误。
  12. 使用 Appium 测试微信小程序 Webview
  13. vue_class 绑定_style 绑定
  14. spring注解第02课 包扫描@ComponentScan、@ComponentScans
  15. 洛谷P3899 [湖南集训]谈笑风生(线段树合并)
  16. SPFA_queue_链式前向星最短路 & HDU2433
  17. [转]ORA-01555错误总结(一)
  18. [Arch] 02. Design principle and Software Pattern
  19. Java_使用日志
  20. 问题记录 | PyLint not recognizing cv2 members

热门文章

  1. RabbitMQ之远程过程调用(RPC)【译】
  2. 使用导出导入(datapump)方式将普通表切换为分区表
  3. 因客户机IP与服务器IP不在同一网段导致无盘客户机开机卡tftp,提示:PXE-E11: ARP timeout
  4. docker 容器内ping不通外网
  5. 利用U盘给Intel NUC安装CentOS
  6. ThinkPHP 的URL重写时遇到No input file specified的解决方法
  7. Hadoop2.x Yarn作业提交(客户端)
  8. MVC已经是现代Web开发中的一个很重要的部分,下面介绍一下Spring MVC的一些使用心得。
  9. HttpServlet中,用来处理POST请求的方法是(选择1项)
  10. 嵌入式开发之davinci--- 8148/8168/8127 中的图像处理算法优化库vlib