3.5 KiB
3.5 KiB
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]]
问题分析
根本原因
- 命名空间配置不匹配:客户端尝试连接的命名空间是
prod,prod-9900,但数据库中的命名空间只有prod - 动态配置问题:配置文件使用
${spring.profiles.active}作为命名空间,导致9900-9903实例的命名空间变成了prod-9900,prod-9901等 - 数据库数据缺失:数据库中缺少对应的命名空间记录
配置对比
数据库中的命名空间:
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.ymlapplication-prod-9901.ymlapplication-prod-9902.ymlapplication-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());
验证步骤
-
重启应用实例
# 重启所有实例 ./hot-start.sh -
检查日志
- 确认不再出现Token认证失败错误
- 确认SnailJob客户端成功注册
-
验证连接
- 访问SnailJob管理界面
- 确认所有实例都显示为在线状态
最佳实践建议
- 命名空间管理:建议使用统一的命名空间(如
prod),避免动态配置导致的复杂性 - 组名管理:使用有意义的组名,便于识别和管理
- 配置验证:在部署前验证配置文件与数据库配置的一致性
- 监控告警:配置SnailJob连接状态的监控告警