在服务间的请求中 有个报错日志一直在打印,项目启动正常,但只要发起feign调用就会打出如下报错日志 Redo subscriber operation REGISTER for DEFAULT_GROUP@@服务名 # failed.
详细日志如下
2023-11-17 18:08:00.167 [127.0.1.1] [com.alibaba.nacos.client.naming.grpc.redo.0] ERROR [,,,] com.alibaba.nacos.client.naming.redoForSubscribes - Redo subscriber operation REGISTER for DEFAULT_GROUP@@服务名# failed.
com.alibaba.nacos.api.exception.NacosException: user not found!
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:359)
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doSubscribe(NamingGrpcClientProxy.java:311)
at com.alibaba.nacos.client.naming.remote.gprc.redo.RedoScheduledTask.redoForSubscribe(RedoScheduledTask.java:127)
at com.alibaba.nacos.client.naming.remote.gprc.redo.RedoScheduledTask.redoForSubscribes(RedoScheduledTask.java:108)
at com.alibaba.nacos.client.naming.remote.gprc.redo.RedoScheduledTask.run(RedoScheduledTask.java:52)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
但是feign调用可以正常调用 调用完成后,就会一直打印如上错误
问题的本质还是 鉴权失败的问题
可以和 check-update] get changed dataId error, code: 403 问题一起看
二者本质问题相同 都是鉴权失败
但是发生的场景不同 一个是在启动后 一个发生在feign调用后
解决思路一致
由于使用的是nacos 2.2.2 版本 并且 开了鉴权 ,初步感觉问题原因,是在鉴权的时候出的问题
检查项目版本
spring boot 2.3.12.RELEASE
spring cloud Hoxton.SR8
spring cloud alibaba 2.2.6.RELEASE
发现 服务注册发现和配置文件中使用nacos-client的是 1.4.2版本
和nacos-server 2.2.2. 版本相差过大
同时发现 鉴权开启后 应用的配置文件中需要添加配置 配置nacos的账号密码 方式选择其一 即可
#方式一 分别指定 discovery 和 config 账号密码
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=xxx
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=xxx
# 方式二 统一指定nacos的账号密码
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=xxx
pom文件中修改 nacos-client的版本 将nacos-discovery 和 nacos-config 依赖中的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>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.2.2</version>
</dependency>
nacos的鉴权失败有几个原因
#方式一 分别指定 discovery 和 config 账号密码
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=xxx
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=xxx
# 方式二 统一指定nacos的账号密码
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=xxx
# 统一指定nacos的账号密码
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=xxx
//...... 省略其他的配置
spring.cloud.nacos.username=
spring.cloud.nacos.password=
以上就是本文的全部内容了,希望可以帮助到大家,另外本文也很有可能没能帮助到各位,请各位见谅,目前只是列出了常见的错误,由于环境以及框架的不同,都会导致问题,希望多排查,如果解决了欢迎留言。
good day !!!