我正在使用Spring Cloud Starter Gateway 2.0.1.RELEASE和Starter netflix hystrix。是否可以在如下所示的路由定义中提供HystrixCommand?
builder.routes()
.route( r -> r.path("path")
.and().method(HttpMethod.GET)
.filters(f -> f.hystrix("myHystrixCommandName"))
.uri("/destination")
.id("route_1"));
我的目标是执行后备方法,而不将请求转发到后备uri。 另外,我无法使用静态后备uri选项,因为我需要路径参数和请求参数来确定后备响应。非常感谢您的帮助!。
答案 0 :(得分:0)
我遇到了同样的问题。这是我解决的方法:
第一,这些是路线:
builder.routes()
.route( r -> r.path("/api/{appid}/users/{userid}")
.and().method(HttpMethod.GET)
.filters(f -> f.hystrix("myHystrixCommandName")
.setFallbackUri("forward:/hystrixfallback"))
.uri("/destination")
.id("route_1"));
路径 谓词处理URL并提取路径变量,并将其保存到ServerWebExchange.getAttributes()
中,并使用定义为PathRoutePredicate.URL_PREDICATE_VARS_ATTR
的键或ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE
您可以找到有关路径谓词here
的更多信息 第二,我创建了一个@RestController
来处理Hystrix注入ServerWebExchange
的前锋:
@RestController
@RequestMapping("/hystrixfallback")
public class ServiceFallBack {
@RequestMapping(method = {RequestMethod.GET})
public String get(ServerWebExchange serverWebExchange) {
//Get the PathMatchInfo
PathPattern.PathMatchInfo pathMatchInfo = serverWebExchange.getAttribute(ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
//Get the template variables
Map<String, String> urlTemplateVariables = pathMatchInfo.getUriVariables();
//TODO Logic using path variables
return "result";
}
}