为了账号安全,请及时绑定邮箱和手机立即绑定

服务器是怎样响应请求的?

服务器是怎样响应请求的?

万千封印 2018-12-22 02:29:08
小弟最近在改后端项目,但出了个 bug 又解决不了,我觉得是我的后端知识太欠缺了,特来这里请教。流程是这样的,前端有上送信息,接口收到信息后,用收到的部分信息再去第三方接口请求信息,把两部分合起来存储。收到的信息中有一部分是用户ID(绝不重复),我用这个 ID + 收到信息的时刻(精确到秒)做 md5,生成一个唯一的序列号作为主键。但是有些时候是上传失败的,日志是这么记录的Could not execute JDBC batch update …… Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (SIT_QDYY.SYS_C0010324) violated我看了下日志,有两条一模一样的信息,按照我上面说的生成序列号的方法,这样肯定会重复。我和前端确认了下,说是不会有一秒钟上传两次的情况,所以我想是不是我收到信息后的网络请求比较耗时导致的(再想不出别的原因了)?而且,每一条上传信息不是按顺序处理的,比如说,接口收到了 A 信息,然后解析,打印日志,还没存下来,B 信息的日志就被记录下来了,后面再是用 A 的信息请求第三方接口,存储,等等我的猜测:服务器是多线程的,每时每刻都在处理请求,而用 A 请求的数据再去请求第三方接口比较耗时,所以 B 请求来到以后,就去处理 B ,另开一个线程去第三方接口获取 A 相关的数据(这里都是猜测,而且和我那个 bug 有啥关系也不清楚)?项目用的是 Struts2 + Hibernate + Oracle,部署在 Weblogic 上。
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

js虽然是单线程的,但是请求是可以连续发的,而且加上各种网络延时,可能就造成同时到达,另外你服务器也可能把任务放在队列中,每次取个几个出来处理
再加一个随机数吧

查看完整回答
反对 回复 2018-12-22
  • 1 回答
  • 0 关注
  • 568 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信