Tech Stack:
我们遇到了一个奇怪的问题,过去两天我们的开发团队一直在努力。我们注意到,在第一次POST发生大约一分钟后,启动Oracle存储过程的微服务POST休息调用会遇到第二次 相同的 (但意外)POST休息调用(它是一个长期运行的存储过程)。我们将这个重复的调用追溯到app-server,该服务器遇到了同样的重复POST问题。最初我们认为罪魁祸首是罪恶客户端中的错误逻辑,但是控制台日志记录和网络分析显示客户端只向其后端发起一个POST。 app-server上的第二个POST似乎是自发的。
这是app-server上的路由处理程序代码,它处理来自Angular客户端的POST,然后POST到微服务REST端点(控制台日志将吐出两次):
module.exports.quarantineActions = function*(){
const opts = {
method: 'POST',
uri: transactionEndpoint+'/rest/quarantine-actions',
json:true,
body:this.request.body
};
console.log('POST to microservice initiated')
const resp = yield request(opts);
console.log('POST to microservice finsihed')
this.status = resp.statusCode;
this.body = resp.body;
};
我还可以补充说,每当发生此重复调用时,app-server都会显示以下错误(如果相关,则不清楚):
错误:套接字挂断 在createHangUpError(_http_client.js:209:15) 在Socket.socketOnEnd(_http_client.js:294:23) 在emitNone(events.js:72:20) 在Socket.emit(events.js:166:7) at endReadableNT(_stream_readable.js:905:12) at nextTickCallbackWith2Args(node.js:455:9) at process._tickCallback(node.js:369:17)
我们目前的工作理论是,如果第一个没有收到响应,那么混合中的某个库(可能是koa-request或request)会启动第二个POST。然而,如果这样做以及如何关闭它或延长超时参数是一个谜。在这一点上,如果有人有类似的事情发生,并有任何建议,我会很感激。感谢。