jet-snowman/yii2-daemon

扩展提供简单守护进程创建和控制功能

1.3.0 2018-07-10 23:37 UTC

This package is not auto-updated.

Last update: 2024-09-26 02:11:38 UTC


README

基本守护进程有3个方法

  1. initModule()
  2. runModule()
  3. 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,您有以下方法

  1. initModule() - 您必须设置您的队列名称。
  2. stopModule()
  3. getChannel() - 您必须返回一个通道
  4. handleMessage($message) - 您必须处理您的任务

消息是 \PhpAmqpLib\Message\AMQPMessage 的实例。每次当 rabbit 向工作者发送任务时,都会调用 handleMessage。在一个迭代中只能处理一个任务。

Sqs Base Daemon

基本类位于 - jet-snowman\daemon\controllers\SqsBaseDaemonController,您有以下方法

  1. initModule() - 您必须设置您的队列名称。
  2. handleMessage($message) - 您必须处理您的任务

消息是 Array 的实例。每次当工作者获取新的响应时,都会调用 handleMessage。如果响应有超过 1 条消息,则它将在一个迭代中多次被调用。