spring-cloud / spring-cloud-gateway

An API Gateway built on Spring Framework and Spring Boot providing routing and more.
http://cloud.spring.io
Apache License 2.0
4.52k stars 3.32k forks source link

Invalid loadbalanced hostname throws NPE #779

Closed songhq211949 closed 5 years ago

songhq211949 commented 5 years ago

Question

java.lang.NullPointerException: null    cause by  URI    url   filed  host is null  
so cause "final ServiceInstance instance = choose(exchange);"  method error
my springBoot version is 2.0.7.RELEASE  springCloud version is Finchley.SR2

my English is poor ,i am a Chinese coder 请原谅 Bug report

2019-01-15 17:22:12.657 DEBUG 7436 --- [ctor-http-nio-2] o.s.web.reactive.DispatcherHandler       : Processing GET request for [http://localhost:6604/app_user/v1/user/test]
2019-01-15 17:22:12.657 DEBUG 7436 --- [ctor-http-nio-2] s.w.r.r.m.a.RequestMappingHandlerMapping : Looking up handler method for path /app_user/v1/user/test
2019-01-15 17:22:12.657 DEBUG 7436 --- [ctor-http-nio-2] s.w.r.r.m.a.RequestMappingHandlerMapping : Did not find handler method for [/app_user/v1/user/test]
2019-01-15 17:22:12.658 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition CompositeDiscoveryClient_GATEWAY-SERVICE applying {pattern=/gateway-service/**} to Path
2019-01-15 17:22:12.659 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition CompositeDiscoveryClient_GATEWAY-SERVICE applying filter {regexp=/gateway-service/(?<remaining>.*), replacement=/${remaining}} to RewritePath
2019-01-15 17:22:12.661 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: CompositeDiscoveryClient_GATEWAY-SERVICE
2019-01-15 17:22:12.662 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition CompositeDiscoveryClient_APP_USER applying {pattern=/app_user/**} to Path
2019-01-15 17:22:12.663 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition CompositeDiscoveryClient_APP_USER applying filter {regexp=/app_user/(?<remaining>.*), replacement=/${remaining}} to RewritePath
2019-01-15 17:22:12.664 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: CompositeDiscoveryClient_APP_USER
2019-01-15 17:22:12.664 TRACE 7436 --- [ctor-http-nio-2] o.s.c.g.h.p.RoutePredicateFactory        : Pattern "/gateway-service/**" does not match against value "[path='/app_user/v1/user/test']"
2019-01-15 17:22:12.664 TRACE 7436 --- [ctor-http-nio-2] o.s.c.g.h.p.RoutePredicateFactory        : Pattern "/app_user/**" matches against value "[path='/app_user/v1/user/test']"
2019-01-15 17:22:12.664 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.h.RoutePredicateHandlerMapping   : Route matched: CompositeDiscoveryClient_APP_USER
2019-01-15 17:22:12.664 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.h.RoutePredicateHandlerMapping   : Mapping [Exchange: GET http://localhost:6604/app_user/v1/user/test] to Route{id='CompositeDiscoveryClient_APP_USER', uri=lb://APP_USER, order=0, predicate=org.springframework.cloud.gateway.support.ServerWebExchangeUtils$$Lambda$505/1976873300@244be971, gatewayFilters=[OrderedGatewayFilter{delegate=org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory$$Lambda$507/1044084559@594d22dd, order=1}]}
2019-01-15 17:22:12.664 DEBUG 7436 --- [ctor-http-nio-2] o.s.c.g.handler.FilteringWebHandler      : Sorted gatewayFilterFactories: [OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@4684240f}, order=-2147482648}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@7f287b98}, order=-1}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardPathFilter@553da911}, order=0}, OrderedGatewayFilter{delegate=org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory$$Lambda$507/1044084559@594d22dd, order=1}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@32120956}, order=10000}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.LoadBalancerClientFilter@115ca7de}, order=10100}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.WebsocketRoutingFilter@327e5be5}, order=2147483646}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyRoutingFilter@29fe4840}, order=2147483647}, OrderedGatewayFilter{delegate=GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardRoutingFilter@6975fb1c}, order=2147483647}]
2019-01-15 17:22:12.666 TRACE 7436 --- [ctor-http-nio-2] o.s.c.g.filter.RouteToRequestUrlFilter   : RouteToRequestUrlFilter start
2019-01-15 17:22:26.180 DEBUG 7436 --- [ctor-http-nio-5] r.ipc.netty.http.server.HttpServer       : [id: 0x36a6a57b, L:/0:0:0:0:0:0:0:1:6604 - R:/0:0:0:0:0:0:0:1:49818] READ COMPLETE
2019-01-15 17:22:26.180 DEBUG 7436 --- [ctor-http-nio-5] r.ipc.netty.http.server.HttpServer       : [id: 0x36a6a57b, L:/0:0:0:0:0:0:0:1:6604 ! R:/0:0:0:0:0:0:0:1:49818] INACTIVE
2019-01-15 17:22:26.181 DEBUG 7436 --- [ctor-http-nio-5] r.ipc.netty.http.server.HttpServer       : [id: 0x36a6a57b, L:/0:0:0:0:0:0:0:1:6604 ! R:/0:0:0:0:0:0:0:1:49818] UNREGISTERED
2019-01-15 17:26:33.725  INFO 7436 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2019-01-15 17:31:33.732  INFO 7436 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2019-01-15 17:36:33.739  INFO 7436 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2019-01-15 17:41:17.580 TRACE 7436 --- [ctor-http-nio-2] o.s.c.g.filter.LoadBalancerClientFilter  : LoadBalancerClientFilter url before: lb:/v1/user/test
2019-01-15 17:41:19.292 DEBUG 7436 --- [ctor-http-nio-2] o.s.w.r.function.server.RouterFunctions  : Predicate "org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler$$Lambda$519/1996527587@3749925b" matches against "GET /app_user/v1/user/test"
2019-01-15 17:41:19.296 ERROR 7436 --- [ctor-http-nio-2] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://localhost:6604/app_user/v1/user/test]

java.lang.NullPointerException: null
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[na:1.8.0_121]
    at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:964) ~[na:1.8.0_121]
    at org.springframework.cloud.context.named.NamedContextFactory.getContext(NamedContextFactory.java:82) ~[spring-cloud-context-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.netflix.ribbon.SpringClientFactory.getContext(SpringClientFactory.java:118) ~[spring-cloud-netflix-ribbon-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.context.named.NamedContextFactory.getInstance(NamedContextFactory.java:126) ~[spring-cloud-context-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.netflix.ribbon.SpringClientFactory.getInstance(SpringClientFactory.java:108) ~[spring-cloud-netflix-ribbon-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.netflix.ribbon.SpringClientFactory.getLoadBalancer(SpringClientFactory.java:57) ~[spring-cloud-netflix-ribbon-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.getLoadBalancer(RibbonLoadBalancerClient.java:155) ~[spring-cloud-netflix-ribbon-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.getServer(RibbonLoadBalancerClient.java:144) ~[spring-cloud-netflix-ribbon-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(RibbonLoadBalancerClient.java:76) ~[spring-cloud-netflix-ribbon-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.gateway.filter.LoadBalancerClientFilter.choose(LoadBalancerClientFilter.java:92) ~[spring-cloud-gateway-core-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.gateway.filter.LoadBalancerClientFilter.filter(LoadBalancerClientFilter.java:69) ~[spring-cloud-gateway-core-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:135) ~[spring-cloud-gateway-core-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) ~[spring-cloud-gateway-core-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:117) ~[spring-cloud-gateway-core-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:45) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Mono.subscribe(Mono.java:3088) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Mono.subscribe(Mono.java:3088) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:271) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:803) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:108) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1083) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:108) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:271) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:803) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:185) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1083) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:138) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1640) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onSubscribe(MonoFilterWhen.java:103) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFilterWhen.subscribe(MonoFilterWhen.java:56) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Mono.subscribe(Mono.java:3088) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:418) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:241) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.DrainUtils.postCompleteDrainDelayError(DrainUtils.java:296) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.DrainUtils.postCompleteDelayError(DrainUtils.java:357) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onComplete(FluxDematerialize.java:144) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:102) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:42) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:391) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:633) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onNext(FluxFlattenIterable.java:238) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:179) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1068) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onComplete(MonoCollectList.java:117) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.DrainUtils.postCompleteDrain(DrainUtils.java:131) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.DrainUtils.postComplete(DrainUtils.java:186) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxMaterialize$MaterializeSubscriber.onComplete(FluxMaterialize.java:134) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:321) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:633) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onComplete(FluxFlattenIterable.java:255) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:138) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1070) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onComplete(MonoCollectList.java:117) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:773) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:543) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:523) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:409) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:266) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:202) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:332) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:140) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:64) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxMaterialize.subscribe(FluxMaterialize.java:40) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxDematerialize.subscribe(FluxDematerialize.java:39) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:55) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Mono.subscribe(Mono.java:3088) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:418) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:210) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:140) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:64) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.Mono.subscribe(Mono.java:3088) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.1.12.RELEASE.jar:3.1.12.RELEASE]
    at reactor.ipc.netty.channel.ChannelOperations.applyHandler(ChannelOperations.java:381) ~[reactor-netty-0.7.12.RELEASE.jar:0.7.12.RELEASE]
    at reactor.ipc.netty.http.server.HttpServerOperations.onHandlerStart(HttpServerOperations.java:403) ~[reactor-netty-0.7.12.RELEASE.jar:0.7.12.RELEASE]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[netty-all-4.1.31.Final.jar:4.1.31.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) ~[netty-all-4.1.31.Final.jar:4.1.31.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:466) ~[netty-transport-4.1.31.Final.jar:4.1.31.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897) ~[netty-all-4.1.31.Final.jar:4.1.31.Final]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_121]

Enhancement

I have try use this application.yml,look at down, two different configs do not work.

spring:
  application:
     name: gateway-service
  cloud:
    gateway:
        discovery:
          locator:
            enabled: true
            lower-case-service-id: true
       #包含三个重要的概念  route  predicate 和  filters   一个route下面包含  id  uri  predicate 和 filter  
   # predicate即路由匹配规则  filter即过滤规则  
#      routes:
#       - id: app_user  # route 下面有好多  具体的路由id为app_user的微服务
#         #lb代表从注册中心中获取服务  使用uri的 http://localhost:8081 的方式成功
#         #uri: http://localhost:8081
#         uri: lb://app_user
#         predicates:
#                      #即转发路径规则
#         - Path=/api/user/**
#                      #过滤规则
#         filters:
#         #StripPrefix即去掉前缀  1代表路径的1个路径字段  2 代表2个路径字段
#         - StripPrefix=1
eureka:
  client:
    serviceUrl:
      defaultZone: http://admin:123@localhost:9003/eureka/
  instance:
    prefer-ip-address: true   
    #默认是主机名:application-name :端口

logging:
  level:
    org.springframework.cloud.gateway: trace
    org.springframework.http.server.reactive: debug
    org.springframework.web.reactive: debug
    reactor.ipc.netty: debug
ryanjbaxter commented 5 years ago

Please learn how to format code on GitHub.

Can you provide a complete, minimal, verifiable sample that reproduces the problem? It should be available as a GitHub (or similar) project or attached to this issue as a zip file.

songhq211949 commented 5 years ago

github in my country is too slow .my gitee projects links is https://gitee.com/dahaizhenqiang/app_eureka.git https://gitee.com/dahaizhenqiang/app_user.git https://gitee.com/dahaizhenqiang/app_gateway.git . I want to through gateway visit the user service in "lb" way, but fail and error

ryanjbaxter commented 5 years ago

How do I reproduce the problem using these projects?

songhq211949 commented 5 years ago

launch three projects in localhost and visit http://localhost:6604/app_user/v1/user/test in Chrome

ryanjbaxter commented 5 years ago

The problem is the service name of your sevice app_user. Since the app name is used as the service id and in turn is used as the hostname in the lb:// uri the app name must be a valid hostname. Hostnames cannot include _. That said we should handle this situation better (see #786). But you will need to change the app name of your app.