spring-cloud / spring-cloud-commons

Common classes used in different Spring Cloud implementations
Apache License 2.0
704 stars 701 forks source link

HintBasedServiceInstanceListSupplier withCaching() throw NPE #1076

Closed lin1005q closed 2 years ago

lin1005q commented 2 years ago

Describe the bug Please provide details of the problem, including the version of Spring Cloud that you are using.

add this code

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                .withDiscoveryClient()
                .withHints()
                .withCaching()
                .build(context);
    }

throw cache about NPE

2022-03-04 09:20:04.291 DEBUG 48002 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter    : [883e8386-2] HTTP GET "/api/auth/config/name"
2022-03-04 09:20:04.293 DEBUG 48002 --- [ctor-http-nio-3] o.s.c.g.h.RoutePredicateHandlerMapping   : Route matched: consumer
2022-03-04 09:20:04.293 DEBUG 48002 --- [ctor-http-nio-3] o.s.c.g.h.RoutePredicateHandlerMapping   : Mapping [Exchange: GET http://127.0.0.1:8766/api/auth/config/name] to Route{id='consumer', uri=lb://microservice-test-consumer, order=8000, predicate=Paths: [/api/auth/**], match trailing slash: true, gatewayFilters=[[[StripPrefix parts = 2], order = 1]], metadata={}}
2022-03-04 09:20:04.293 DEBUG 48002 --- [ctor-http-nio-3] o.s.c.g.h.RoutePredicateHandlerMapping   : [883e8386-2] Mapped to org.springframework.cloud.gateway.handler.FilteringWebHandler@154fd108
2022-03-04 09:20:04.293 DEBUG 48002 --- [ctor-http-nio-3] o.s.c.g.handler.FilteringWebHandler      : Sorted gatewayFilterFactories: [[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RemoveCachedBodyFilter@55c1ced9}, order = -2147483648], [GatewayFilterAdapter{delegate=com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter@1894fa9f}, order = -2147483648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@3002e397}, order = -2147482648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@59b492ec}, order = -1], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardPathFilter@6c5ca0b6}, order = 0], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.GatewayMetricsFilter@1a88c4f5}, order = 0], [[StripPrefix parts = 2], order = 1], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@49cc9b2a}, order = 10000], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter@4e48462d}, order = 10150], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.LoadBalancerServiceInstanceCookieFilter@17216605}, order = 10151], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.WebsocketRoutingFilter@37b01ce2}, order = 2147483646], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyRoutingFilter@10a907ec}, order = 2147483647], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardRoutingFilter@11826398}, order = 2147483647]]
2022-03-04 09:20:04.295 DEBUG 48002 --- [ctor-http-nio-3] a.w.r.e.AbstractErrorWebExceptionHandler : [883e8386-2] Resolved [NullPointerException: Cannot invoke "Object.hashCode()" because "key" is null] for HTTP GET /api/auth/config/name
2022-03-04 09:20:04.296 ERROR 48002 --- [ctor-http-nio-3] a.w.r.e.AbstractErrorWebExceptionHandler : [883e8386-2]  500 Server Error for HTTP GET "/api/auth/config/name"

java.lang.NullPointerException: Cannot invoke "Object.hashCode()" because "key" is null
    at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[na:na]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
    *__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
    *__checkpoint ⇢ HTTP GET "/api/auth/config/name" [ExceptionHandlingWebHandler]
Original Stack Trace:
        at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[na:na]
        at com.stoyanr.evictor.map.ConcurrentMapWithTimedEvictionDecorator.get(ConcurrentMapWithTimedEvictionDecorator.java:194) ~[evictor-1.0.0.jar:na]
        at org.springframework.cloud.loadbalancer.cache.DefaultLoadBalancerCache.lookup(DefaultLoadBalancerCache.java:95) ~[spring-cloud-loadbalancer-3.1.1.jar:3.1.1]
        at org.springframework.cache.support.AbstractValueAdaptingCache.get(AbstractValueAdaptingCache.java:65) ~[spring-context-5.3.15.jar:5.3.15]
        at org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier.lambda$new$0(CachingServiceInstanceListSupplier.java:64) ~[spring-cloud-loadbalancer-3.1.1.jar:3.1.1]
        at reactor.cache.CacheFlux.lambda$null$4(CacheFlux.java:152) ~[reactor-extra-3.4.6.jar:3.4.6]
        at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Mono.subscribe(Mono.java:4400) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:255) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Mono.subscribe(Mono.java:4400) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:255) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at com.alibaba.csp.sentinel.adapter.reactor.MonoSentinelOperator.subscribe(MonoSentinelOperator.java:40) ~[sentinel-reactor-adapter-1.8.3.jar:na]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Mono.subscribe(Mono.java:4400) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:255) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:282) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:151) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:282) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:149) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onSubscribe(MonoFilterWhen.java:112) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Mono.subscribe(Mono.java:4400) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:451) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:251) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:98) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:44) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:272) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:230) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.request(FluxDematerialize.java:127) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:236) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onSubscribe(FluxDematerialize.java:77) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:165) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:87) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:62) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Mono.subscribe(Mono.java:4400) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:451) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:219) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:165) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:87) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.Mono.subscribe(Mono.java:4400) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:255) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.14.jar:3.4.14]
        at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:962) ~[reactor-netty-http-1.0.15.jar:1.0.15]
        at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:671) ~[reactor-netty-core-1.0.15.jar:1.0.15]
        at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:478) ~[reactor-netty-core-1.0.15.jar:1.0.15]
        at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:560) ~[reactor-netty-http-1.0.15.jar:1.0.15]
        at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:93) ~[reactor-netty-core-1.0.15.jar:1.0.15]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:220) ~[reactor-netty-http-1.0.15.jar:1.0.15]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327) ~[netty-codec-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299) ~[netty-codec-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) ~[netty-transport-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-common-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.73.Final.jar:4.1.73.Final]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.73.Final.jar:4.1.73.Final]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

2022-03-04 09:20:04.300 DEBUG 48002 --- [ctor-http-nio-3] o.s.http.codec.json.Jackson2JsonEncoder  : [883e8386-2] Encoding [{timestamp=Fri Mar 04 09:20:04 CST 2022, path=/api/auth/config/name, status=500, error=Internal Serv (truncated)...]
2022-03-04 09:20:04.301 DEBUG 48002 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter    : [883e8386-2] Completed 500 INTERNAL_SERVER_ERROR
2022-03-04 09:20:19.687 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying {pattern=/bussiness-gateway-test/**} to Path
2022-03-04 09:20:19.688 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.filter.GatewayMetricsFilter      : New routes count: 3
2022-03-04 09:20:19.692 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying filter {regexp=/bussiness-gateway-test/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:20:19.693 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_bussiness-gateway-test
2022-03-04 09:20:19.693 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying {pattern=/microservice-test-consumer/**} to Path
2022-03-04 09:20:19.695 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying filter {regexp=/microservice-test-consumer/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:20:19.697 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_microservice-test-consumer
2022-03-04 09:20:19.697 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying {_genkey_0=/api/auth/**} to Path
2022-03-04 09:20:19.698 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying filter {_genkey_0=2} to StripPrefix
2022-03-04 09:20:19.699 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: consumer
2022-03-04 09:20:49.694 DEBUG 48002 --- [oundedElastic-3] o.s.c.g.filter.GatewayMetricsFilter      : New routes count: 3
2022-03-04 09:20:49.697 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying {pattern=/bussiness-gateway-test/**} to Path
2022-03-04 09:20:49.699 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying filter {regexp=/bussiness-gateway-test/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:20:49.700 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_bussiness-gateway-test
2022-03-04 09:20:49.701 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying {pattern=/microservice-test-consumer/**} to Path
2022-03-04 09:20:49.702 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying filter {regexp=/microservice-test-consumer/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:20:49.703 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_microservice-test-consumer
2022-03-04 09:20:49.704 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying {_genkey_0=/api/auth/**} to Path
2022-03-04 09:20:49.705 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying filter {_genkey_0=2} to StripPrefix
2022-03-04 09:20:49.706 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: consumer
2022-03-04 09:21:19.696 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying {pattern=/bussiness-gateway-test/**} to Path
2022-03-04 09:21:19.696 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.filter.GatewayMetricsFilter      : New routes count: 3
2022-03-04 09:21:19.697 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying filter {regexp=/bussiness-gateway-test/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:21:19.698 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_bussiness-gateway-test
2022-03-04 09:21:19.698 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying {pattern=/microservice-test-consumer/**} to Path
2022-03-04 09:21:19.699 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying filter {regexp=/microservice-test-consumer/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:21:19.701 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_microservice-test-consumer
2022-03-04 09:21:19.701 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying {_genkey_0=/api/auth/**} to Path
2022-03-04 09:21:19.702 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying filter {_genkey_0=2} to StripPrefix
2022-03-04 09:21:19.703 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: consumer
2022-03-04 09:21:49.698 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying {pattern=/bussiness-gateway-test/**} to Path
2022-03-04 09:21:49.699 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying filter {regexp=/bussiness-gateway-test/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:21:49.700 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.filter.GatewayMetricsFilter      : New routes count: 3
2022-03-04 09:21:49.701 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_bussiness-gateway-test
2022-03-04 09:21:49.701 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying {pattern=/microservice-test-consumer/**} to Path
2022-03-04 09:21:49.702 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying filter {regexp=/microservice-test-consumer/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:21:49.703 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_microservice-test-consumer
2022-03-04 09:21:49.704 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying {_genkey_0=/api/auth/**} to Path
2022-03-04 09:21:49.705 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying filter {_genkey_0=2} to StripPrefix
2022-03-04 09:21:49.706 DEBUG 48002 --- [oundedElastic-5] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: consumer
2022-03-04 09:22:19.707 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying {pattern=/bussiness-gateway-test/**} to Path
2022-03-04 09:22:19.707 DEBUG 48002 --- [oundedElastic-6] o.s.c.g.filter.GatewayMetricsFilter      : New routes count: 3
2022-03-04 09:22:19.708 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying filter {regexp=/bussiness-gateway-test/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:22:19.709 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_bussiness-gateway-test
2022-03-04 09:22:19.709 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying {pattern=/microservice-test-consumer/**} to Path
2022-03-04 09:22:19.711 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying filter {regexp=/microservice-test-consumer/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:22:19.712 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_microservice-test-consumer
2022-03-04 09:22:19.712 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying {_genkey_0=/api/auth/**} to Path
2022-03-04 09:22:19.714 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying filter {_genkey_0=2} to StripPrefix
2022-03-04 09:22:19.715 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: consumer
2022-03-04 09:22:49.707 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying {pattern=/bussiness-gateway-test/**} to Path
2022-03-04 09:22:49.707 DEBUG 48002 --- [oundedElastic-4] o.s.c.g.filter.GatewayMetricsFilter      : New routes count: 3
2022-03-04 09:22:49.708 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_bussiness-gateway-test applying filter {regexp=/bussiness-gateway-test/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:22:49.710 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_bussiness-gateway-test
2022-03-04 09:22:49.711 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying {pattern=/microservice-test-consumer/**} to Path
2022-03-04 09:22:49.712 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition ReactiveCompositeDiscoveryClient_microservice-test-consumer applying filter {regexp=/microservice-test-consumer/?(?<remaining>.*), replacement=/${remaining}} to RewritePath
2022-03-04 09:22:49.713 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: ReactiveCompositeDiscoveryClient_microservice-test-consumer
2022-03-04 09:22:49.714 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying {_genkey_0=/api/auth/**} to Path
2022-03-04 09:22:49.714 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition consumer applying filter {_genkey_0=2} to StripPrefix
2022-03-04 09:22:49.715 DEBUG 48002 --- [oundedElastic-1] o.s.c.g.r.RouteDefinitionRouteLocator    : RouteDefinition matched: consumer

Sample If possible, please provide a test case or sample application that reproduces the problem. This makes it much easier for us to diagnose the problem and to verify that we have fixed it.

lin1005q commented 2 years ago

672

lin1005q commented 2 years ago

@OlgaMaciaszek

OlgaMaciaszek commented 2 years ago

Hello @lin1005q, please provide a minimal, complete, verifiable example that reproduces the issue.

lin1005q commented 2 years ago

https://github.com/lin1005q/test-spring-cloud

lin1005q commented 2 years ago

@OlgaMaciaszek

OlgaMaciaszek commented 2 years ago

Hello @lin1005q - thanks for providing a sample. Will take a look tomorrow.

OlgaMaciaszek commented 2 years ago

Hello @lin1005q. This happens, because you've added the LB configuration bean to a class where your root application context is configured. As you can read in the docs, classes containing LB configuration beans should be passed as configuration argument of the @LoadBalancerClient annotation and they should not be annotated with @Configuration (or any meta-annotations that include it, such as @SpringBootApplication). This way, the beans will be created in specific child contexts, a different one for every load-balanced service. This change fixes the setup.

lin1005q commented 2 years ago

Thank you very much. How can it be set as the global default, which is automatically configured like xxx-spring-boot-starter. No need to manually add the @LoadBalancerClient annotation

OlgaMaciaszek commented 2 years ago

If you want to set a custom configuration, you need to use the annotation. If you want to have a default for many clients, you can use @LoadBalancerClients(defaultConfiguration= CustomConfig.class). Please read the docs - it's all described there.