yiicod / yii2-jobqueue
基于 Illuminate Queue 的 Yii Job Queue
1.1.2.1
2018-04-27 15:37 UTC
Requires
- illuminate/database: ^5.5.0|^5.6.0
- illuminate/encryption: ^5.5.0|^5.6.0
- illuminate/queue: ^5.5.0|^5.6.0
- paragonie/random_compat: ^1.2
- symfony/process: ~3.0|~4.0
- yiicod/yii2-cron: 1.*
- yiisoft/yii2: 2.*
- yiisoft/yii2-mongodb: ~2.1.0
Requires (Dev)
README
提供使用 mongodb 作为主要存储的 Illuminate 队列实现,用于 Yii 2。
基本配置
'bootstrap' => [ 'jobqueue' ], 'components' => [ 'jobqueue' => [ 'class' => \yiicod\jobqueue\JobQueue::class ], 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://@localhost:27017/mydatabase', ], ]
控制台配置(简单分支)
'bootstrap' => [ 'jobqueue' ], 'controllerMap' => [ 'job-queue' => [ 'class' => \yiicod\jobqueue\commands\JobQueueCommand::class, ] ], 'components' => [ 'jobqueue' => [ 'class' => \yiicod\jobqueue\JobQueue::class ], 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://@localhost:27017/mydatabase', ], ]
启动工作进程
使用控制台命令运行工作进程守护程序
$ php yii job-queue/start
停止工作进程守护程序
$ php yii job-queue/stop
控制台配置 + PM2 (https://pm2.node.org.cn/)。此变体更适合控制台配置。
'bootstrap' => [ 'jobqueue' ], 'controllerMap' => [ 'job-queue' => [ 'class' => \yiicod\jobqueue\commands\WorkerCommand::class, ] ], 'components' => [ 'jobqueue' => [ 'class' => \yiicod\jobqueue\JobQueue::class ], 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://@localhost:27017/mydatabase', ], ]
pm2 配置
{ "apps": [ { "name": "job-queue", "script": "yii", "args": [ "job-queue/work" ], "exec_interpreter": "php", "exec_mode": "fork_mode", "max_memory_restart": "1G", "watch": false, "merge_logs": true, "out_file": "runtime/logs/job_queue.log", "error_file": "runtime/logs/job_queue.log" } ] }
运行 PM2 守护程序
pm2 start daemons-app.json
注意:不要忘记配置 mongodb
向队列添加任务
创建一个实现 yiicod\jobqueue\base\JobQueueInterface 的自己的处理器,或者扩展 yiicod\jobqueue\handlers\JobQueue 并运行 parent::fire($job, $data) 以在处理任务之前重新启动数据库连接
JobQueue::push(<--YOUR JOB QUEUE CLASS NAME->>, $data, $queue, $connection); // Optional: $queue, $connection
注意:$data - 传递给处理器的附加数据
队列配置
添加带有连接参数的 jobqueue 组件,特别是带有 "MongoThreadQueue" 驱动和连接名称(例如示例中的 "default")
'jobqueue' => [ 'class' => \yiicod\jobqueue\JobQueue::class, 'connections' => [ 'default' => [ 'driver' => 'mongo-thread', 'table' => 'yii-jobs', 'queue' => 'default', 'connection' => 'mongodb', // Default mongodb connection 'expire' => 60, 'limit' => 1, // How many parallel process should run at the same time ], ] ]
工作进程将从 mongo 数据库中提取任务,并使用定义的驱动程序在后台使用 "mongo-thread" 命令通过线程运行它们
可用事件
在 Worker::class 中
EVENT_RAISE_BEFORE_JOB = 'raiseBeforeJobEvent'; EVENT_RAISE_AFTER_JOB = 'raiseAfterJobEvent'; EVENT_RAISE_EXCEPTION_OCCURED_JOB = 'raiseExceptionOccurredJobEvent'; EVENT_RAISE_FAILED_JOB = 'raiseFailedJobEvent'; EVENT_STOP = 'stop';