Node.js - 意外重复的后休息调用

时间:2017-01-12 21:15:07

标签: angularjs node.js rest sockets koa

Tech Stack:

  • Angular 1.4 app-client,POST到:
  • 节点5.1 app-server(基于koa / es6的框架),POST到:
  • 节点5.1微服务器 - 服务器(基于koa / es6的框架),调用:
  • Oracle 11.x存储过程

我们遇到了一个奇怪的问题,过去两天我们的开发团队一直在努力。我们注意到,在第一次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。然而,如果这样做以及如何关闭它或延长超时参数是一个谜。在这一点上,如果有人有类似的事情发生,并有任何建议,我会很感激。感谢。

0 个答案:

没有答案