php - Heroku worker 如何工作?

标签 php heroku message-queue worker

Heroku 支持多种类型的 dyno 配置,并允许我们为应用程序设置 webworker 进程类型,例如:

web: vendor/bin/heroku-php-apache2 web/
worker: php worker/myworker.php

web dyno 将处理网络流量,同时可以使用worker dyno 类型as a background job (e.g.: to process a queue.)

文档没有让我清楚这些 worker 是如何运作的,即:他们是如何开始的?行为?

特别是:

  • 它们是否只在部署时运行一次?或者它们是否重复运行(如果是什么时候)?
  • 它们是否有最长执行时间?
  • 可以在它们内部使用无限循环吗?或者我应该以某种方式触发它们?

如果我选择一个简单的hello world:

myworker.php
<?php
error_log( "Hello world. This is the worker talking." );
?>

然后(在部署或重启之后)heroku logs --tail --ps worker 只显示了这个:

2017-08-31T17:46:55.353948+00:00 heroku[worker.1]: State changed from crashed to starting
2017-08-31T17:46:57.834203+00:00 heroku[worker.1]: Starting process with command `php worker/mailer.php`
2017-08-31T17:46:58.452281+00:00 heroku[worker.1]: State changed from starting to up
2017-08-31T17:46:59.782480+00:00 heroku[worker.1]: State changed from up to crashed
2017-08-31T17:46:59.773468+00:00 heroku[worker.1]: Process exited with status 0
2017-08-31T17:46:59.697976+00:00 app[worker.1]: Hello world. This is the worker talking.

这是预期的行为吗?

(我不太习惯从命令行使用 PHP,这似乎是工作人员正在做的事情,这可能解释了我的一些困惑。)

背景:为了我自己的利益,我试图了解它们是如何工作的,同时也帮助我决定我应该使用 worker 还是 clock我正在适应 Heroku 的自制邮件/时事通讯系统。

最佳答案

您可能已经知道了,但对于任何正在寻找答案的人来说,这是我的经验:

  • 它们是否只在部署时运行一次?或者它们是否重复运行(如果是什么时候)?

它们将在部署后运行并继续运行,除非发出退出命令或脚本返回错误。根据我的经验,当发生错误时,它会立即中断并在一段时间后重新启动(这似乎是随机的)。我不确定执行干净退出时它是否会重新启动。

  • 它们是否有最长执行时间?

没有。但请记住,所有测功机每天都会重新启动一次。

  • 可以在它们内部使用无限循环吗?或者我应该以某种方式触发它们?

是的。我的大部分使用都涉及循环休眠,然后调用主脚本函数。

关于php - Heroku worker 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987488/

相关文章:

rabbitmq - 当消息发布到没有订阅者的队列上时会发生什么?

php - Jquery .Ajax - 如何传递数据

javascript - Node.js:无法将 node.js 应用程序部署到 heroku

python - Flask session 在 Heroku 上使用 Gunicorn 的 Flask 应用程序中的请求之间不持久

postgresql - 如何从本地机器连接到 heroku pg?

message-queue - 如何使用 Celery 保证消息传递?

php - 向博客添加类别和子类别

php - smarty 中的引用数组

php - 如何在 php 中为搜索创建过滤器

linux - 消息队列 makefile 错误 : undefined reference to `mq_open'