问题场景
微服务项目,所有业务服务通过docker-compose编排顺序并启动,gateway服务监测到nacos服务启动后立即向nacos注册。现在的问题是每次服务器重启或者docker-compose集中up时gateway服务报错(见下图),提示找不到用户,注册失败。但是重启gateway服务后又正常。
本文的解决方案仅限于此场景:当nacos启动后,其他业务服务马上注册。
先上截图:
gateway服务异常日志:报错user not found
nacos异常日志:报错找不到登录的用户名
问题原因:
查看图二异常中提到的NacosUserDetailsServiceImpl.java的源码可知(图懒得贴了):nacos服务的用户数据不是即时向数据库获取的,而是通过定时查询数据库并保存在内存中。但是定时任务首次查询时会延迟5秒再去执行,这就导致nacos刚启动就向它注册的话就会找不到用户数据!
解决办法:
我这边的处理办法是修改了gateway服务的启动脚本,监测到nacos服务启动后再等待10秒后再运行。