jet-snowman / yii2-daemon
扩展提供简单守护进程创建和控制功能
Requires
- ext-pcntl: *
- ext-posix: *
- jet-snowman/yii2-consolelog: dev-master
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-26 02:11:38 UTC
README
基本守护进程有3个方法
- initModule()
- runModule()
- stopModule()
它位于包 jet-snowman\daemon\BaseDaemonController 中。
对于每个方法,您都可以添加自己的逻辑。例如,在 initModule 中可以进行某些连接的初始化,在 stopModule 方法中可以关闭连接。runModule() 方法在一个循环中执行。对于开发,该方法只会运行一次,您无需每次都停止守护进程。当完成一个迭代后,守护进程会更新 pid 文件,这允许跟踪守护进程的状态。runModule() 中的任务必须是轻量级的,例如,如果迭代需要 1 分钟,这意味着停止守护进程至少需要 1 分钟,并且如果在异常情况下,您将丢失进度,因此任务必须很小,并且应该少于 5 秒钟完成。
如果 pid 文件在 X 次时间没有更新,监控器将杀死并重新启动守护进程。监控器始终在运行,它监控服务器上的所有守护进程,因此停止您的守护进程之前,您必须确保首先停止监控器。
监控器的配置可以在以下位置找到 - /console/controllers/WatcherDaemonController.php
protected function getDaemonsList() { return [ ['daemon' => 'metric/metric-license-daemon', 'enabled' => TRUE, 'debug' => TRUE, 'kill' => TRUE, 'maxTime' => 60, 'count' => 2], ['daemon' => 'metric/metric-facility-daemon', 'enabled' => TRUE, 'debug' => TRUE, 'kill' => TRUE, 'maxTime' => 60, 'count' => 3], ['daemon' => 'metric/metric-wordpress-daemon', 'enabled' => TRUE, 'debug' => TRUE, 'kill' => TRUE, 'maxTime' => 60, 'count' => 2], ['daemon' => 'metric/metric-delivery-daemon', 'enabled' => TRUE, 'debug' => TRUE, 'kill' => TRUE, 'maxTime' => 60, 'count' => 1], ['daemon' => 'greenbits/greenbits-product-daemon', 'enabled' => TRUE, 'debug' => TRUE, 'kill' => TRUE, 'maxTime' => 60, 'count' => 1], ]; }
daemon - 这是运行 ./yii 时可以找到的守护进程名称
enabled - 您可以启用或禁用某些守护进程
debug - 如果启用,则守护进程将带有调试标志运行
kill - 如果启用,则监控器将在 X 次时间后杀死守护进程
maxTime - 迭代之间的最大时间
守护进程 Bin 文件夹
补丁位于 ./bin。要创建可运行的文件,您可以复制一些现有的守护进程,并且您需要定义以下常量
#!/usr/bin/env php <?php define('DAEMON_NAME', 'Metric Delivery Daemon'); define('DAEMON_BIN_NAME', 'metric/metric-delivery-daemon'); define('DAEMON_PID_NAME', 'metric-metric-delivery-daemon'); require_once (__DIR__.'/init.php');
DAEMON_NAME - 可以是任何名称
DAEMON_BIN_NAME - 必须来自 ./yii,并且必须在监控器配置中使用相同的名称
DAEMON_PID_NAME - 可以是任何名称,但不能包含斜杠
Rabbit Base Daemon
基本类位于 - jet-snowman\daemon\controllers\RabbitMQBaseDaemonController,您有以下方法
- initModule() - 您必须设置您的队列名称。
- stopModule()
- getChannel() - 您必须返回一个通道
- handleMessage($message) - 您必须处理您的任务
消息是 \PhpAmqpLib\Message\AMQPMessage 的实例。每次当 rabbit 向工作者发送任务时,都会调用 handleMessage。在一个迭代中只能处理一个任务。
Sqs Base Daemon
基本类位于 - jet-snowman\daemon\controllers\SqsBaseDaemonController,您有以下方法
- initModule() - 您必须设置您的队列名称。
- handleMessage($message) - 您必须处理您的任务
消息是 Array 的实例。每次当工作者获取新的响应时,都会调用 handleMessage。如果响应有超过 1 条消息,则它将在一个迭代中多次被调用。