Spring Cloud Gateway中的Hystrix命令

时间:2018-08-15 00:29:47

标签: spring-cloud hystrix spring-cloud-gateway

我正在使用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选项,因为我需要路径参数和请求参数来确定后备响应。非常感谢您的帮助!。

1 个答案:

答案 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";
    }
}