Files
hzdyjs/docs/问题解决方案/SnailJob命名空间配置修复方案.md
T
2025-08-31 19:38:31 +08:00

3.5 KiB
Raw Blame History

SnailJob命名空间配置修复方案

问题描述

四个ruoyi-admin实例启动后都提示SnailJob Token认证失败:

2025-08-31 01:44:09 [snail-job-grpc-client-executor-172.16.0.67-1216] ERROR c.a.s.c.c.handler.ClientRegister
 - heartbeat check requestId:[1216] message:[Token authentication failed. [namespace:prod,prod-9900 groupName:ruoyi_group_9900 token:SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT]]

问题分析

根本原因

  1. 命名空间配置不匹配:客户端尝试连接的命名空间是 prod,prod-9900,但数据库中的命名空间只有 prod
  2. 动态配置问题:配置文件使用 ${spring.profiles.active} 作为命名空间,导致9900-9903实例的命名空间变成了 prod-9900, prod-9901 等
  3. 数据库数据缺失:数据库中缺少对应的命名空间记录

配置对比

数据库中的命名空间:

1	Development	dev
2	Production	prod

客户端尝试连接的命名空间:

  • prod,prod-9900
  • prod,prod-9901
  • prod,prod-9902
  • prod,prod-9903

解决方案

方案一:修改配置文件(已实施)

将所有实例的命名空间统一为 prod,而不是使用 ${spring.profiles.active}:

修改的文件:

  • application-prod-9900.yml
  • application-prod-9901.yml
  • application-prod-9902.yml
  • application-prod-9903.yml

修改内容:

snail-job:
  namespace: "prod"  # 从 ${spring.profiles.active} 改为固定值

方案二:数据库方案(备选)

如果希望保持动态命名空间配置,可以在数据库中创建对应的命名空间:

-- 为每个实例创建对应的命名空间
INSERT INTO `sj_namespace` VALUES (3, 'Production-9900', 'prod-9900', '', 0, now(), now());
INSERT INTO `sj_namespace` VALUES (4, 'Production-9901', 'prod-9901', '', 0, now(), now());
INSERT INTO `sj_namespace` VALUES (5, 'Production-9902', 'prod-9902', '', 0, now(), now());
INSERT INTO `sj_namespace` VALUES (6, 'Production-9903', 'prod-9903', '', 0, now(), now());

-- 为每个命名空间创建对应的组配置
INSERT INTO `sj_group_config` VALUES (13, 'prod-9900', 'ruoyi_group_9900', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, now(), now());
INSERT INTO `sj_group_config` VALUES (14, 'prod-9901', 'ruoyi_group_9901', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, now(), now());
INSERT INTO `sj_group_config` VALUES (15, 'prod-9902', 'ruoyi_group_9902', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, now(), now());
INSERT INTO `sj_group_config` VALUES (16, 'prod-9903', 'ruoyi_group_9903', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, now(), now());

验证步骤

  1. 重启应用实例

    # 重启所有实例
    ./hot-start.sh
    
  2. 检查日志

    • 确认不再出现Token认证失败错误
    • 确认SnailJob客户端成功注册
  3. 验证连接

    • 访问SnailJob管理界面
    • 确认所有实例都显示为在线状态

最佳实践建议

  1. 命名空间管理:建议使用统一的命名空间(如 prod),避免动态配置导致的复杂性
  2. 组名管理:使用有意义的组名,便于识别和管理
  3. 配置验证:在部署前验证配置文件与数据库配置的一致性
  4. 监控告警:配置SnailJob连接状态的监控告警

相关文档