记录一个关于客户端服务器时间不一致导致的问题
新项目上线到非本地服务器,在正式环境上发布通知通报,发现使用pc管理端发布通知时,没有发送卡片消息.
然后展开检查,由于该项目是放在远程服务器同局域网的另一台服务器上.所以请求运维帮助,下载了一份log文件进行分析.
问题表现:
定位到发布消息的日志段后发现,该通知被当成了定时任务保存起来,并没有立即发布.
系统如果判断提交的发布时间早于当前系统时间,则立即发布,如果提交的发布时间晚于当前系统时间,则由quartz创建一个定时任务.
然而定时任务数据中的发布时间又只精确到了分钟,秒钟部分直接清零.例如 2021/02/20 09:10:58 会变成 2021/02/20 09:10:00 所以定时任务也错过时间,导致手机端卡片消息不会发送.
问题分析:
通知发布时,发布时间可以选择此刻或者未来某一个时间,选择此刻时间时,是由前端获取的浏览器客户端时间,也就是操作页面所在的pc系统时间
由于时间的取处不同,会导致触发偶然问题.
如果客户端主机时间比服务器时间慢,当前需要发布定时任务,可能会使服务器判断成立即发布;
如果客户端主机时间比服务器时间快,当前需要立即发布,可能会使服务器判断成发布定时任务.
处理方法:
1.在发布通知时,页面上的"此刻"时间通过接口获取服务器的时间
2.在判断逻辑中,给发布时间减去一分钟,使服务器时间与客户端时间允许一分钟的宽容度期限
3.调整逻辑,页面允许提交发布时间为空,如果为空,则直接立即发布,时间使用系统时间,就可以完全规避立即发布时的问题,但是可能在定时任务时出现问题.

浙公网安备 33010602011771号