我是靠谱客的博主 兴奋翅膀,最近开发中收集的这篇文章主要介绍Spring Cloud Zuul 网关服务的fallback,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当我们的zuul进行路由分发时,如果后端服务没有启动,或者调用超时,这时候我们希望Zuul提供一种降级功能,而不是将异常暴露出来。

Spring cloud zuul提供这种降级功能,操作步骤如下:

1.在主函数上添加@EnbaleZuulProxy注解。

2.定义将降级类,并实现FallbackProvider接口。(在Dalston版本需实现ZuulFallbackProvider,在Edgware.RC1之后版本实现FallbackProvider接口)。

@Component
public class FallBackHandler implements FallbackProvider {
@Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
if (cause != null && cause.getCause() != null) {
String reason = cause.getCause().getMessage();
//输出详细的回退原因
log.info("接口:" + route + ",fallback reason: {}", reason);
}
return new ClientHttpResponse() {
@Override
public InputStream getBody() {
// 当出现服务调用错误之后返回的数据内容
return new ByteArrayInputStream("{"code":-1,"msg":"服务暂不可用"}".getBytes(StandardCharsets.UTF_8));
}
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
//和body中的内容编码一致,否则容易乱码
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
return headers;
}
/**
* 网关向api服务请求是失败了,但是消费者客户端向网关发起的请求是OK的,
* 不应该把api的404,500等问题抛给客户端
* 网关和api服务集群对于客户端来说是黑盒子
*/
@Override
public HttpStatus getStatusCode() {
return HttpStatus.BAD_REQUEST;
}
@Override
public int getRawStatusCode() {
return HttpStatus.BAD_REQUEST.value();
}
@Override
public String getStatusText() {
return HttpStatus.BAD_REQUEST.getReasonPhrase();
}
@Override
public void close() {
}
};
}
@Override
public String getRoute() {
return "*";
}
}

 

最后

以上就是兴奋翅膀为你收集整理的Spring Cloud Zuul 网关服务的fallback的全部内容,希望文章能够帮你解决Spring Cloud Zuul 网关服务的fallback所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部