【问题标题】:Can you run a Heroku worker process with Node & Express你能用 Node 和 Express 运行 Heroku 工作进程吗
【发布时间】:2020-08-17 02:19:51
【问题描述】:

我正在尝试在没有 Web 进程的 Heroku 上运行 Worker 进程。

这是一个小型节点快递应用程序。但除非我有一个 Web 进程正在运行,否则它不起作用。

我有一个带有

的 Procfile

worker node server.js

但我得到了这个错误

heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/

我想将它作为工作进程运行,因为工作人员不受 30 秒超时限制,而且应该更有效率。此端点仅用于处理与我们的主 API 分开的 1 个密集型任务,因此将其设置为工作人员是有意义的。

按照这个

https://help.heroku.com/PFSOIDTR/why-am-i-seeing-h12-request-timeouts-high-response-times-in-my-app

问题 2:我是否将长时间运行的任务委派为后台作业?如果 你不能让你的代码运行得更快,你只需要更多的时间 (即处理图像、解析文档、进行 API 调用等),您 可以在工人测功机上将它们作为后台作业运行。工人测功机不 面对与网络测功机相同的 30 秒超时,使它们变得完美 举重。

我在解决这个问题时发现的所有问题都说扩展到 web:1

所以这让我相信 express 不能仅作为工作人员运行,而必须是 Web 进程?

【问题讨论】:

    标签: node.js express heroku


    【解决方案1】:

    根据 Heroku 网站上的 this articleworker dynos 不公开任何端口。如果您想拥有一个可通过 Web 访问的端点,则必须使用 web dyno。不过,您可以通过使用 队列协议 与 web 和 worker dyno 通信来实现您想要的,如 this answer by Ryan Daigle 中所述。

    【讨论】:

    • 谢谢,是的,这是有道理的。没有 HTTP 调用意味着 Express 只能在 Web 上运行。我已经通过使用 Redis 作为 Web 和 Worker 进程之间的消息代理解决了这个问题,并且它工作得很好!
    猜你喜欢
    • 2012-04-14
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2012-09-30
    • 2021-08-04
    相关资源
    最近更新 更多