【发布时间】:2019-01-09 20:55:06
【问题描述】:
application.properties:
spring.cloud.gateway.discovery.locator.enabled=true
logging.level.org.springframework.cloud.gateway=debug
spring.cloud.gateway.routes[0].uri=lb://BIZSERVICE-DEMO
spring.cloud.gateway.routes[0].predicates[0]=Path=/demo/**
spring.cloud.gateway.routes[0].filters[0].name=StripPrefix
spring.cloud.gateway.routes[0].filters[0].args.parts=1
spring.cloud.gateway.routes[0].filters[1].name=Hystrix
spring.cloud.gateway.routes[0].filters[1].args.name=fallbackcmd
spring.cloud.gateway.routes[0].filters[1].args.fallbackUri=forward:/fallback
hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds=5000
当我运行网关服务时,访问http://.../demo/123,控制台报告:
2018-08-02 14:50:49.454 [reactor-http-nio-2] 错误 ipf.filter.ExceptionHandler - {timestamp=Thu Aug 02 14:50:49 CST 2018, 路径=/demo/demo/1,状态=500,错误=内部服务器错误, message=找不到名称为 Hystrix 的 GatewayFilterFactory, trace=java.lang.IllegalArgumentException: 找不到 名称为 Hystrix 的 GatewayFilterFactory 在 org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.lambda$loadGatewayFilters$3(RouteDefinitionRouteLocator.java:142) 在 java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 在 java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 在
它的原因是什么,我可以做些什么来预防它?
【问题讨论】:
-
您似乎没有提供足够的详细信息以便有人帮助您。您能否提供更多详细信息,说明您使用的插件、您之前尝试过的内容以及您的设置。
-
StripPrefix 文件有效,但Hystrix 文件可用,报告:找不到名称为Hystrix 的GatewayFilterFactory。我在源码中调试程序:公共类RouteDefinitionRouteLocator,发现hystrix过滤器不存在gatewayFilterFactories:SetPath、RequestHeaderToRequestUri、ModifyResponseBody、RemoveRequestHeader、RedirectTo、、ModifyRequestBody、SetResponseHeader、SecureHeaders、AddRequestParameter、AddResponseHeader、PreserveHostHeader、RewritePath、SetStatus、SetRequestHeader 、PrefixPath、Retry、AddRequestHeader、RemoveResponseHeader、SaveSession、、StripPrefix
-
私有列表
loadGatewayFilters(String id, List filterDefinitions) { List filters = (List)filterDefinitions.stream().map((definition) -> { GatewayFilterFactory factory = (GatewayFilterFactory )this.gatewayFilterFactories.get(definition.getName()); if(factory == null) { throw new IllegalArgumentException("Unable to find GatewayFilterFactory with name " + definition.getName()); } debug:info: definition:" FilterDefinition{name='Hystrix',args={fallbackUri=forward:/fallback,name=fallbackcmd}}"
标签: spring cloud gateway hystrix