首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Cloud Gateway -无服务实例返回503

Spring Cloud Gateway -无服务实例返回503
EN

Stack Overflow用户
提问于 2017-11-11 00:04:13
回答 3查看 4.3K关注 0票数 0

尝试使用通过Eureka服务器注册/发现的Spring Boot微服务的Spring Cloud Gateway。设置工作正常,客户端可以通过网关调用发现的服务,没有问题,这是很棒的。

现在,我正在尝试测试这样一个场景:客户端调用一个服务(通过网关),而该服务当前没有可用于服务调用的实例(即服务已关闭)。当我们测试这个场景时,默认的行为是客户端得到一个500内部服务器错误响应。更改此默认行为以返回503 Service Unavilable响应的最简单方法是什么?

当前堆栈:

代码语言:javascript
复制
Java 8
Spring Boot 2.0.0.M6 
Spring Cloud 2.0.0.M3
Spring Cloud Starter Eureka 2.0.0.M2 (in Gateway JVM)
Spring Cloud Starter Netflix Ribbon 2.0.0.M3 (in Gateway JVM)
Spring Cloud Starter Netflix Eureka Server 2.0.0.M3 (in Eureka Server JVM)
EN

回答 3

Stack Overflow用户

发布于 2017-11-18 02:06:59

最后,我们决定让错误响应保持原样。即HTTP 500 - Unable to find instance for test-service-name。但是,我们向网关的路由机制添加了功能,使每个路由都包含一个enabled: true|false标志,这样我们就可以根据需要临时启用/禁用对这些微服务的访问。我们通过重新构建标记为enabled: false的路由来实现这一点,以便在它们中包含一个返回以下内容的GatewayFilter

代码语言:javascript
复制
Mono.error(new WebRequestException(HttpStatus.SERVICE_UNAVAILABLE, "SERVICE_UNAVAILABLE",
            "Service is down for maintenance"));

无论何时呼叫该enabled: false路由。

WebRequestException是我们自己的Throwable类,然后我们在自己的WebExceptionHandler中拦截它,它根据需要处理ServerWebExchangeServerHttpResponse

注意1:网关正在使用.中的 spring-boot-starter-webflux

Bean注意2:每当我们更改路由的enabled enabled标志的状态时,我们: 1)重新构建路由,2)调用 .refresh() GatewayFilter 的Bean方法,以便在没有Bean的情况下使用|重新缓存路由。

票数 0
EN

Stack Overflow用户

发布于 2021-09-21 11:17:58

这个问题非常类似于:

https://stackoverflow.com/a/69257852/12952273

但是以不同的方式被问到。

有一种称为断路器的模式,它有助于避免级联故障(如果被调用的服务没有响应,可能会发生级联故障)

https://martinfowler.com/bliki/CircuitBreaker.html

票数 0
EN

Stack Overflow用户

发布于 2017-11-14 00:44:00

这可能有点老生常谈,但是为什么不添加一个controller advice呢?像这样的东西应该能把你带到那里。

代码语言:javascript
复制
@ControllerAdvice
public class ServiceNotFoundHandler {
    @ExceptionHandler(NotFoundException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE)
    public String handleUnavailableService(NotFoundException e) {
        return "service unavailable";
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47226810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档