alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.22k stars 12.83k forks source link

springboot2 gateway 在nacos2.0.0下不能发现服务,这个是否能支持?怎么配置?1.4.1下没问题 #5210

Closed sxqem closed 3 years ago

sxqem commented 3 years ago

springboot2 gateway 在nacos2.0.0下不能发现服务,这个是否能支持,怎么配置?1.4.1下没问题

jabincui commented 3 years ago

同问

ctlove0523 commented 3 years ago

@sxqem What is springboot 2 gateway and how you config?

sxqem commented 3 years ago

springcloud 里的gateway ,使用的是标准的微服务路由配置,之前1.4.1下是可以访问的,但是升级nacos 2.0.0后就访问路由不到服务了。 spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 group: TEST-GROUP gateway: discovery: locator: enabled: true lower-case-service-id: true globalcors: #跨域 corsConfigurations: '[/*]': allowedOrigins: "" allowedMethods:

ctlove0523 commented 3 years ago

5147 this issue maybe helpful

KomachiSion commented 3 years ago

麻烦按照issue模版来描述问题, 我完全get不到你现在问题是什么。

gateway无法发现服务只是表象,nacos日志是什么?看下是不是没有发起订阅,或者是订阅了没收到服务列表?或者是控制台上看不到gateway? 有没有什么报错信息?

如果无法提供有用信息,就只能靠自己排查了。

jabincui commented 3 years ago

我有同样的问题,在任何情况下网关都不能通过负载均衡找到微服务。

复现问题 maven工程下有一个微服务(test),一个网关(api-gateway),它们都注册到nacos,在nacos也可以看到它们出现在服务列表。 以下是test的代码: domin.test.controller.TestController.java

@Controller public class TestController { @ResponseBody @GetMapping(value = "/hello") public String hello() { return "hello world"; } }

application.yaml

server: port: 8101 spring: application: name: test cloud: sentinel: transport: port: 9101 # 微服务和Sentinel通信的端口 dashboard: localhost:8880 datasource: ds1: nacos: server-addr: 127.0.0.1:8848 dataId: sentinel-user groupId: DEFAULT_GROUP data-type: json rule-type: flow nacos: discovery: server-addr: 127.0.0.1:8848

以下是api-gateway的代码: application.yaml

server: port: 8000 spring: application: name: api-gateway cloud: nacos: discovery: server-addr: 127.0.0.1:8848 gateway: discovery: locator: enabled: true lowerCaseServiceId: true routes:

当我尝试访问http://localhost:8000/lb/hello时出现了如下错误信息: [e90c821f-3] There was an unexpected error (type=Service Unavailable, status=503). Unable to find instance for test org.springframework.cloud.gateway.support.NotFoundException: 503 SERVICEUNAVAILABLE "Unable to find instance for test" at org.springframework.cloud.gateway.support.NotFoundException.create(NotFoundException.java:45) 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 "/lb/hello" [ExceptionHandlingWebHandler] Stack trace: at org.springframework.cloud.gateway.support.NotFoundException.create(NotFoundException.java:45) at org.springframework.cloud.gateway.config.GatewayNoLoadBalancerClientAutoConfiguration$NoLoadBalancerClientFilter.filter(GatewayNoLoadBalancerClientAutoConfiguration.java:79) at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:137) at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:117) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.Mono.subscribe(Mono.java:4046) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:173) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.Mono.subscribe(Mono.java:4046) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:173) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:73) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:281) at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:860) at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:73) at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:151) at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:281) at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:860) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:149) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2397) at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onSubscribe(MonoFilterWhen.java:112) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) at reactor.core.publisher.Mono.subscribe(Mono.java:4046) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:448) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:250) at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:98) at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:44) at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:270) at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:228) at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.request(FluxDematerialize.java:127) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:235) at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onSubscribe(FluxDematerialize.java:77) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:164) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:62) at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) at reactor.core.publisher.Mono.subscribe(Mono.java:4046) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:448) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:218) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:164) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.Mono.subscribe(Mono.java:4046) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:173) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:860) at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:638) at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:478) at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:525) at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:209) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:830)

Spring Boot 2.4.3 Spring Cloud 2020.0.1 SCA 2020.0.RC1 nacos-server 2.0.0

ctlove0523 commented 3 years ago

I test spring cloud gateway with nacos,you can try update version of spring-cloud-starter-alibaba-nacos-discovery such as 2.2.5.RELEASE

lidaofu-hub commented 3 years ago

我也遇到这样的问题 spring boot 版本为2.2.5 spring cloud alibaba 2.2.3.RELEASE spring cloud Hoxton.SR3 部署了多台gateway 访问接口有时候找不到服务 image

KomachiSion commented 3 years ago

统一回复下所有人:

网关找不到服务很可能是因为网关自身的缓存或查询逻辑导致的,可以在之前的issue中找到答案,如#5147

如果觉得是nacos的问题,需要给出的信息是nacos相关的内容,而非网关的, 比如给出nacos的客户端日志(一般在${user.home}/logs/nacos/naming.log),或者到服务端看下对应的服务是否是正常的。 再或者用纯粹的nacos-java-sdk去订阅和查询一下,看是否能获取到最新的服务列表。

LusiferCoder commented 3 years ago

我的没问题啊,用的版本是:

spring cloud alibaba 2.2.5

Apache Dubbo: 2.7.9

Spring Boot: 2.4.4

Spring Cloud: 2020.0.2

jabincui commented 3 years ago

我的没问题啊,用的版本是:

spring cloud alibaba 2.2.5

Apache Dubbo: 2.7.9

Spring Boot: 2.4.4

Spring Cloud: 2020.0.2

  • 最后如丝般顺滑的升级

像lb://{serivce name} 这样的url也可以找到吗?求一份源码

sxqem commented 3 years ago

你路由用的是gateway?-- 发自新浪邮箱客户端 在 4月5日 19:06,jabincui @.***> 写道:

我的没问题啊,用的版本是:

spring cloud alibaba 2.2.5

Apache Dubbo: 2.7.9

Spring Boot: 2.4.4

Spring Cloud: 2020.0.2

最后如丝般顺滑的升级

像lb://{serivce name} 这样的url也可以找到吗?求一份源码

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

LusiferCoder commented 3 years ago

我的没问题啊,用的版本是:

spring cloud alibaba 2.2.5

Apache Dubbo: 2.7.9

Spring Boot: 2.4.4

Spring Cloud: 2020.0.2

  • 最后如丝般顺滑的升级

像lb://{serivce name} 这样的url也可以找到吗?求一份源码

是可以找到的,我做的是动态路由,并不是写死在配置里的

LusiferCoder commented 3 years ago

我的没问题啊,用的版本是:

spring cloud alibaba 2.2.5

Apache Dubbo: 2.7.9

Spring Boot: 2.4.4

Spring Cloud: 2020.0.2

  • 最后如丝般顺滑的升级

像lb://{serivce name} 这样的url也可以找到吗?求一份源码

是可以找到的,我做的是动态路由,并不是写死在配置里的

源码暂不提供,内部的项目

jabincui commented 3 years ago

你路由用的是gateway?-- 发自新浪邮箱客户端 在 4月5日 19:06,jabincui @.***> 写道: 我的没问题啊,用的版本是: spring cloud alibaba 2.2.5 Apache Dubbo: 2.7.9 Spring Boot: 2.4.4 Spring Cloud: 2020.0.2 最后如丝般顺滑的升级 像lb://{serivce name} 这样的url也可以找到吗?求一份源码 — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

是的

DoraemonAndRat commented 3 years ago

这不是nacos的问题,springcloud如果使用的是2020版本,需要添加load-balance依赖

fank243 commented 3 years ago

spring-cloud-starter-gateway中lb模块是可选的,手动引入下就可以

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
      <version>3.0.3</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
HerovNL commented 2 years ago

注意依赖关系,我这边也遇到巨坑,总是不行,后来maven依赖关系中nacos中通过exclusion排除掉netflix-ribbon,引入依赖spring-cloud-loadbalancer,这时还是不行,还要把gateway的yml配置中禁用默认的loadbancer才行,即yml中配置spring.cloud.loadbalancer.enabled=false;

ctlove0523 commented 2 years ago

你好,你的邮件我已经收到,每天会在晚上查看邮件并回复。急事请打电话