记录一个关于客户端服务器时间不一致导致的问题

新项目上线到非本地服务器,在正式环境上发布通知通报,发现使用pc管理端发布通知时,没有发送卡片消息.

然后展开检查,由于该项目是放在远程服务器同局域网的另一台服务器上.所以请求运维帮助,下载了一份log文件进行分析.

 

问题表现:

定位到发布消息的日志段后发现,该通知被当成了定时任务保存起来,并没有立即发布.

系统如果判断提交的发布时间早于当前系统时间,则立即发布,如果提交的发布时间晚于当前系统时间,则由quartz创建一个定时任务.

然而定时任务数据中的发布时间又只精确到了分钟,秒钟部分直接清零.例如 2021/02/20 09:10:58 会变成 2021/02/20 09:10:00 所以定时任务也错过时间,导致手机端卡片消息不会发送.

 

问题分析:

通知发布时,发布时间可以选择此刻或者未来某一个时间,选择此刻时间时,是由前端获取的浏览器客户端时间,也就是操作页面所在的pc系统时间

由于时间的取处不同,会导致触发偶然问题.

如果客户端主机时间比服务器时间慢,当前需要发布定时任务,可能会使服务器判断成立即发布;

如果客户端主机时间比服务器时间快,当前需要立即发布,可能会使服务器判断成发布定时任务.

 

处理方法:

1.在发布通知时,页面上的"此刻"时间通过接口获取服务器的时间

2.在判断逻辑中,给发布时间减去一分钟,使服务器时间与客户端时间允许一分钟的宽容度期限

3.调整逻辑,页面允许提交发布时间为空,如果为空,则直接立即发布,时间使用系统时间,就可以完全规避立即发布时的问题,但是可能在定时任务时出现问题.

posted @ 2021-02-20 09:28  lifeidll  阅读(999)  评论(0)    收藏  举报