【发布时间】:2021-12-29 18:01:22
【问题描述】:
我是第一次使用 spring-cloud-gateway 并且对响应式世界也很陌生,所以我可能会遗漏一些东西。我已经配置了 CircuitBreaker,它可以正常工作。我有一个后备 uri,它位于我的网关控制器内。我想抛出原始异常,但也想捕获该异常,可能是为了度量。所以我配置了fallbackHeaders。因此首先调用SpringCloudCircuitBreakerFilter,然后它使用CircuitBreaker 调用服务。如果抛出异常,我希望它会首先调用addExceptionDetails 方法,然后调用FallbackHeadersGatewayFilter,但它似乎调用FallbackHeadersGatewayFilter,然后添加异常。有人可以帮助我了解这是否是正确的行为,以及我如何获得异常(除了编写我自己的过滤器)。这是路由器配置:
.filters(spec -> spec.filters(filters)
.circuitBreaker(c -> {
c.setRouteId(route.getRouteId());
c.setName("slow");
c.setFallbackUri("forward:/fallback");
c.addStatusCode("400");
c.addStatusCode("404");
c.addStatusCode("500");
}
)
.fallbackHeaders(config -> {
config.setExecutionExceptionMessageHeaderName("message-header");
config.setExecutionExceptionTypeHeaderName("type-header");
config.setRootCauseExceptionMessageHeaderName("root-cause-message-header");
config.setRootCauseExceptionTypeHeaderName("root-cause-type-header");
}
)
【问题讨论】:
标签: spring spring-boot spring-cloud-gateway