• Redo subscriber operation REGISTER for DEFAULT_GROUP@@xxx # failed.


    前言

    在服务间的请求中 有个报错日志一直在打印,项目启动正常,但只要发起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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    但是feign调用可以正常调用 调用完成后,就会一直打印如上错误

    定位分析

    问题的本质还是 鉴权失败的问题
    可以和 check-update] get changed dataId error, code: 403 问题一起看

    二者本质问题相同 都是鉴权失败
    但是发生的场景不同 一个是在启动后 一个发生在feign调用后
    解决思路一致

    分析

    由于使用的是nacos 2.2.2 版本 并且 开了鉴权 ,初步感觉问题原因,是在鉴权的时候出的问题

    1. 检查项目版本
      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. 版本相差过大

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解决

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    总结

    nacos的鉴权失败有几个原因

    1. 使用了较新的nacos-server开启了鉴权 但是 应用本身自带的nacos-client版本 过低
      这个问题很重要 !!! (低版本的client 请求nacos-server时 可能不会携带 鉴权信息 导致鉴权失败)
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 鉴权配置没生效 (重要!!!)
      未放置在bootstrap配置文件中 (需要将该配置放入到bootstrap 应用配置中 优先加载)(平常的项目配置文件 一般是 application-环境.yaml)需要修改成 bootstrap-环境.yaml
    2. 配置被重写 这个属于细节性问题,记得多检查
      同一个配置文件配置了两遍 例如说在nacos的配置上或者 服务上对应的配置文件里 第一遍写了 账号密码 后面有配置了一遍 但是没有写上账号面 例如下面这样
    # 统一指定nacos的账号密码 
    spring.cloud.nacos.username=nacos
    spring.cloud.nacos.password=xxx
    
    //...... 省略其他的配置
    spring.cloud.nacos.username=
    spring.cloud.nacos.password=
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. nacos 账号密码 不对 切结配置正确的账号密码

    以上就是本文的全部内容了,希望可以帮助到大家,另外本文也很有可能没能帮助到各位,请各位见谅,目前只是列出了常见的错误,由于环境以及框架的不同,都会导致问题,希望多排查,如果解决了欢迎留言。

    good day !!!

  • 相关阅读:
    PyTorch中DistributedDataParallel使用笔记
    LVS:NAT模式详解
    【Oracle学习】—新建数据库连接,超详细
    Leetcode 381. Insert Delete GetRandom O(1) - Duplicates allowed (数据结构设计好题)
    洛谷U53878 树上背包,指针分配内存
    HarmonyOS学习 -- ArkTS开发语言入门
    时序预测 | Python实现ConvLSTM卷积长短期记忆神经网络股票价格预测(Conv1D-LSTM)
    凡尔码安全巡检卡替代传统纸质记录卡
    学神经网络需要什么基础,神经网络从入门到精通
    狂码两万字!最新八股文(Java岗),建议全文背诵
  • 原文地址:https://blog.csdn.net/a15835774652/article/details/134479491