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.07k stars 12.81k forks source link

2.2.1版本,SpringBoot应用比nacos启动快,连接几次连接不上就退出了,查看了源码,建议修改以下内容。 #10983

Closed baiguoz closed 1 year ago

baiguoz commented 1 year ago

1,nacos注册的核心方法是 requestToServer image 如图,这里有个一个 rpcClientConfig.retryTimes() , 希望这里的startUpRetryTimes 可以配置,用户可以设置重连次数是最好的 重连3次根本不够用,在应用比nacos启动快的情况下,注册不上。

2, image

如图,如果1连接不上,2这里根本不会走到redoForInstances方法和redoForSubscribes 方法 建议将下面判断去掉,因为如果注册上了,对应方法循环就是空的,就没有问题,如果注册信息变更了,重新注册也没有什么问题 if (!redoService.isConnected()) { LogUtils.NAMING_LOGGER.warn("Grpc Connection is disconnect, skip current redo task"); return; }

KomachiSion commented 1 year ago

重连次数是无限的,你截图的代码只是单次重连的重试次数, 单次连接失败出去之后, 会有一个异步线程一直检查并发起重连。

你可以用一个简单的方式测试,写个main方法,只使用nacos-client, 然后写一个无效地址,在main方法最后写while死循环。 你会发现logs/nacos/remote.log中一直在尝试重连。

这里说连接几次连不上退出,应该是你应用自己的问题。可能某个请求异常之后抛出异常导致了程序的退出。

baiguoz commented 1 year ago

作为配置中心的时候重连是无限次数的,作为注册中心,试了好久,都不行

baiguoz commented 1 year ago

最简单的,你用Ruoyi的gateway,去掉 spring-cloud-starter-alibaba-nacos-config ,只剩下注册中心 spring-cloud-starter-alibaba-nacos-discovery 就会自动退出了

cptjackwu commented 1 year ago

我也遇到相同的问题,用docker去重启nacos和一个自己的服务,然后就一直注册不上去,一直报grpc connection is disconnect, skip current redo task

cptjackwu commented 1 year ago

这是必现的问题,当服务先启动,它会尝试去重连nacos,然后过一会在去启动nacos,后面会重连上,但是在nacos上没有发现该服务注册上去。如果是正常启动nacos,然后再启动服务,这个时候服务正常注册上去,然后把nacos停掉,然后过会在重启nacos,这个时候服务是能重新注册上去的。

KomachiSion commented 1 year ago

我自测没有问题, 客户端版本2.2.1 服务端版本2.2.1

客户端先启动,注册一个服务实例 报错not Starting, naming.log限制grpc connection is disconnect, skip current redo task

随后启动服务端,服务端启动完成2s后,客户端停止报错,控制台能查看到该服务实例。

KomachiSion commented 1 year ago

测试直接使用的nacos-client,没有包gateway没有包spring boot。

同样 2.2.4 也测试了, 共测试了10次, 一次都没有复现。

cptjackwu commented 1 year ago

如果使用

com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.nacos nacos-client
    <!--注册中心客户端-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>2.2.3</version>
    </dependency>

先启动服务实例,然后docker启动nacos-server-v2.2.3版本,最后服务不报错,但是服务没有注册到nacos上imageimage

cptjackwu commented 1 year ago
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.nacos nacos-client com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.nacos nacos-client com.alibaba.nacos nacos-client 2.2.3

如果项目中使用这样的依赖,更新到新的版本2.2.3的版本,试了下还是一样的问题,唯一的不同就是Grpc Connection is disconnect, skip current redo task 不在打印,但是nacos上面服务一直没有注册上去

在 2023-08-25 14:21:24,"杨翊 SionYang" @.***> 写道:

测试直接使用的nacos-client,没有包gateway没有包spring boot。

同样 2.2.4 也测试了, 共测试了10次, 一次都没有复现。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

KomachiSion commented 1 year ago

我是用SCA的example,先启动example再启动nacos server,进行测试,也没有问题。无法复现,总感觉是你们环境的问题,nacos server后启动就会一直连不上。

baiguoz commented 1 year ago

我发送一个网关的代码,不需要连接数据库,直接可以启动 现象1:只配置 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>

不配置config,程序启动运行,nacos不启动的情况下重连几次之后程序就退出了,不会一直重连。如果不配置注册中心(spring-cloud-starter-alibaba-nacos-discovery),程序也不会自动退出。

现象2:同时配置了之后