0604-Zuul构建API Gateway-Zuul的回退
2024-08-25 00:38:20
一、概述
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;
}
};
}
}
都是
最新文章
- 从无到有实现登录功能以及thinkphp怎么配置数据库信息
- Web安全之SQL注入攻击技巧与防范
- ASP.NET MVC 中将FormCollection与实体间转换方法
- TN035: Using Multiple Resource Files and Header Files with Visual C++
- 从prompt输入10个人的年龄放入数组,将十个人的年龄求总和。
- Labview二进制文件的操作
- css笔记——区分css3中的transform transition animation
- Phpcms V9 所有的中文变量
- Qt用Zip压缩文件夹的一些坑
- 判断是否是IE9浏览器的最短语句 var ie=!-[1,]
- 解决Dynamics 365使用JS调用Web API时报no property value was found in the payload 错误。
- 使用 Appium 测试微信小程序 Webview
- vue_class 绑定_style 绑定
- spring注解第02课 包扫描@ComponentScan、@ComponentScans
- 洛谷P3899 [湖南集训]谈笑风生(线段树合并)
- SPFA_queue_链式前向星最短路 &; HDU2433
- [转]ORA-01555错误总结(一)
- [Arch] 02. Design principle and Software Pattern
- Java_使用日志
- 问题记录 | PyLint not recognizing cv2 members
热门文章
- RabbitMQ之远程过程调用(RPC)【译】
- 使用导出导入(datapump)方式将普通表切换为分区表
- 因客户机IP与服务器IP不在同一网段导致无盘客户机开机卡tftp,提示:PXE-E11: ARP timeout
- docker 容器内ping不通外网
- 利用U盘给Intel NUC安装CentOS
- ThinkPHP 的URL重写时遇到No input file specified的解决方法
- Hadoop2.x Yarn作业提交(客户端)
- MVC已经是现代Web开发中的一个很重要的部分,下面介绍一下Spring MVC的一些使用心得。
- HttpServlet中,用来处理POST请求的方法是(选择1项)
- 嵌入式开发之davinci--- 8148/8168/8127 中的图像处理算法优化库vlib