问题描述
一个合同签订一直不能成功
排查过程
首先排查到其他合同签订没有什么问题,有问题的只有这个新项目的合同
看日志请求有返回read time out异常
可能导致这个问题的原因
1.某个地方有人针对他改了相关的超时时间,不太可能
2.这个文件有问题
(最后确认是文件太大,发给第三方处理完再拿回来的过程中超时导致问题产生)
链路梳理
整个服务的请求链路梳理
app的react-native请求方法② ->原生的请求方法 ->nginx ->springMVC的一个公司自制的后端框架
-> 另一个自制的中间件 -> 总服务tomcat端发起方(cfca客户端)->(中间网关①)->cfca服务端
响应链路梳理
cfca服务端 ->(中间网关①)-> 总服务 tomcat端发起方(cfca客户端)->另一个自制的中间件 ->springMVC的一个公司自制的后端框架->原生的接受响应 ->app的react-native接收到结果②
通过日志的时间分析以及后续的配合测试
确认是cfca方的签章服务大合同文件处理时间超长
他一共会导致两个地方的问题
一个是标红的中间网关 会有会话时间的限制,他会导致超过一点时间的会话不在保持,直接返回会话过期
一个是蓝色的app的react-native请求响应② 那里会有超时时间设置,超过时间先返回断开会话
问题解决
最后所有的涉及的几方一起讨论出的解决方式就是合同生成的过程和结果异步
将app的签约请求到后端之后,是将它相关的数据存在表里,保存成功即返回用户“合同正在生成中”,之后会创建一个调度,每秒跑一次,遍历表内没有生成和同的相关数据,最后将结果update,文件存储在服务器,最后再更新合同状态从“合同正在生成中”到“查看合同”时insert进去