【发布时间】:2018-09-26 00:42:06
【问题描述】:
我正在使用 SenecaJS 构建基于微服务的应用程序。到目前为止,我已经概念化了一个微服务,它只包含一个动作。调用此操作时,将执行一个耗时的 shell 命令(大约耗时 3 分钟)并作为响应返回 - shell 命令的输出。我的代码文件可以在这里找到:https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb
所以,我一直在尝试以两种不同的方式向该服务发出请求:首先,我使用 cURL 向服务(运行插件 osfp_tool)发送直接请求,如下所示:http://senecajs.org/getting-started/#writing-microservices .
其次,通过参考本教程:http://senecajs.org/getting-started/#web-server-integration,我编写了一个与我的服务(osfp_service)通信的 Express API。因此,我将 HTTP 请求(使用 POSTMAN)发送到 Express API。
我曾经在这两种情况下都收到客户端请求超时错误。经过一番研究,我了解了 Seneca 实例中的超时配置。因此,我在 2 个地方添加了时间配置 - 在 Seneca 服务 (osfp_service) 以及 Express API (app.js) 中。请注意,我已将超时设置为 300000 毫秒或 5 分钟。我已经检查过 shell 命令大约需要 3 分钟,所以超时设置得更多。但是,我仍然面临客户端请求超时错误,如下所示。我知道 shell 命令执行没有错误,就像在我的服务日志上一样,即使在我收到客户端超时请求错误之后,操作也成功完成了执行,这可以使用 console.log 消息看到。
希望有人可以帮助我解决这个问题,现在坚持了很长时间。
编辑
所以,我一直在玩超时配置。通过将 seneca 实例中的超时设置在最顶层 (https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb#file-osfp_service-js-L8),我能够解决来自 osfp_service.js 脚本的超时错误。
如果我以同样的方式在app.js 中设置超时配置(https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb#file-app2-js-L26),那么我仍然会收到错误 504:客户端请求超时/网关超时(https://drive.google.com/open?id=1El2JCy047dnm6PHlvU33d_mKPuIWUlfX)。
如果我在 seneca 实例 (https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb#file-app1-js-L26) 的传输对象内的 app.js 中设置超时配置,则会收到错误 503:响应超时/服务不可用 (https://drive.google.com/open?id=1u6w7XyK9-vAJVhna_JnIQ4imRzOm_51T)。我不明白为什么它说服务不可用,因为该操作确实被执行,甚至成功完成。
我似乎无法理解不同的行为。
【问题讨论】:
标签: node.js express timeout client seneca