在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:multi-process-queue开源软件地址:https://gitee.com/hzhangjiayun/multi-process-queue开源软件介绍:multi-process-queue基于swoole的多进程队列系统,manage进程管理子进程,master进程监听队列分发任务,worker进程执行任务,多进程、低延时(最低毫秒级)、低资源占用、高可用、可多服务器分布式部署。可与 laravel thinkphp 等框架配合使用。 版本要求:
当前支持的驱动
特性
进程结构图配置说明
fail_handle 会传入两个参数 $jobInfo 任务详细信息、$e出错的异常类fail_handle的执行时间也受timeout的控制 注意:任务超时后会直接记录为失败,不会根据fail_number进行失败重试,可以在fail_handle中根据$jobInfo['type']判断是否是超时任务。2.0改动
下个版本规划
配置示例[ 'basics'=>[ 'name'=>'mp-queue-1',//多个服务器同时启动时需要分别设置名字 'driver'=> new \MPQueue\Queue\Driver\Redis('127.0.0.1'), ], 'queue' => [ [ 'name' => 'test',//队列名称 'fail_handle'=>function(){ var_dump('失败了'); },//失败执行函数 ], [ 'name' => 'test2',//队列名称 'worker_number' => 4,//当前队列工作进程数量 'memory_limit' => 0, //当前队列工作进程的最大使用内存,超出则重启。单位 MB ] ]] 快速上手1.安装
composer require yuntian001/multi-process-queue
2. 启动队列
<?phpdefine('MP_QUEUE_CLI', true);use MPQueue\Config\Config;require_once __DIR__ . '/vendor/autoload.php';$config = [ 'basics' => [ 'name' => 'mp-queue-1',//多个服务器同时启动时需要分别设置名字 'driver' => new \MPQueue\Queue\Driver\Redis('127.0.0.1'), ], 'queue' => [ [ 'name' => 'test',//队列名称 'fail_handle' => function () { var_dump('失败了'); },//失败执行函数 ], [ 'name' => 'test2',//队列名称 'worker_number' => 4,//当前队列工作进程数量 'memory_limit' => 0, //当前队列工作进程的最大使用内存,超出则重启。单位 MB ] ]];Config::set($config);(new \MPQueue\Console\Application())->run();
php master.php worker:start
php master.php worker:start -d
php master.php list queue:clean 清空队列内容 --queue test 清空指定队列:test queue:status 查看队列信息 --queue test 指定队列:test queue:failed 打印失败信息详情 必须指定队列 --queue test 指定队列:test worker:start 启动 携带参数-d 后台启动 worker:stop 停止 worker:restart 重启 携带参数-d 后台启动 worker:reload 平滑重启 worker:status 查看进程运行状态 3. 投递任务
require_once __DIR__ . '/vendor/autoload.php';//require composer 加载文件 如果已加载则无需重复require $config = [ 'basics' => [ 'name' => 'mp-queue-1',//多个服务器同时启动时需要分别设置名字 'driver' => new \MPQueue\Queue\Driver\Redis('127.0.0.1'), ], 'queue' => [ [ 'name' => 'test',//队列名称 'fail_handle' => function () { var_dump('失败了'); },//失败执行函数 ], [ 'name' => 'test2',//队列名称 'worker_number' => 4,//当前队列工作进程数量 'memory_limit' => 0, //当前队列工作进程的最大使用内存,超出则重启。单位 MB ] ] ]; Config::set($config); $job = function(){ var_dump('hello wordQ!'); } MPQueue\Queue\Queue::push('test', $job,10); MPQueue\Queue\Queue::push 接收三个参数:
任务投递示例,请参考test和test/Job文件夹下的normal.php、failed.php、timeout.php、pressure.php 注意事项
在laravel中使用
composer require yuntian001/multi-process-queue
<?php//当前仅为示例,具体配置可按文档自定义return [ 'basics'=>[ 'name'=>'mp-queue-1',//多个服务器同时启动时需要分别设置名字 'driver'=> new \MPQueue\Queue\Driver\Redis('127.0.0.1'), 'worker_start_handle'=>function(){ //加载laravel核心程序 defined('LARAVEL_START') || define('LARAVEL_START', microtime(true)); $app = require_once __DIR__.'/../bootstrap/app.php'; $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); } ], 'queue' => [ [ 'name' => 'test',//队列名称 'fail_handle'=>function($info,$e){ //自定义逻辑如存储到mysql },//失败执行函数 ], [ 'name' => 'test2',//队列名称 'worker_number' => 4,//当前队列工作进程数量 'memory_limit' => 0, //当前队列工作进程的最大使用内存,超出则重启。单位 MB ] ], 'log' => [ 'path' => __DIR__.'/../storage/logs',//日志存放目录需要可写权限 ]];
#!/usr/bin/env php<?phpdefine('MP_QUEUE_CLI', true);use MPQueue\Config\Config;require __DIR__.'/vendor/autoload.php';Config::set(include(__DIR__.'/config/mp-queue.php'));(new \MPQueue\Console\Application())->run();
<?php//位置位于app/Job/HelloWord.phpnamespace App\Job;use Illuminate\Support\Facades\Log;use MPQueue\Job;Class HelloWord extends Job{ //handle内可调用laravel方法和函数,但handle函数不支持依赖注入传参 public function handle() { var_dump('hello word!'); Log::info('hello word!'); }}
php mp-queue worker:start -d
\MPQueue\Config\Config::set(config('mp-queue'));//配置项设置也可放在app容器中AppServiceProvider boot() 统一加载 \MPQueue\Queue\Queue::push('test',\App\Job\HelloWord::class); 在thinkphp5.0中使用
composer require yuntian001/multi-process-queue
<?php//当前仅为示例,具体配置可按文档自定义return [ 'basics'=>[ 'name'=>'mp-queue-1',//多个服务器同时启动时需要分别设置名字 'driver'=> new \MPQueue\Queue\Driver\Redis('127.0.0.1'), 'worker_start_handle'=>function(){ //加载thinkphp核心应用 \think\App::initCommon(); } ], 'queue' => [ [ 'name' => 'test',//队列名称 'fail_handle'=>function($info,$e){ //自定义逻辑如存储到mysql },//失败执行函数 ], [ 'name' => 'test2',//队列名称 'worker_number' => 4,//当前队列工作进程数量 'memory_limit' => 0, //当前队列工作进程的最大使用内存,超出则重启。单位 MB ] ], 'log' => [ 'path' => __DIR__.'/../../runtime',//日志存放目录需要可写权限 ]];
#!/usr/bin/env php<?phpdefine('MP_QUEUE_CLI', true);define('APP_PATH', __DIR__ . '/application/');// ThinkPHP 基础文件require __DIR__ . '/thinkphp/base.php';\MPQueue\Config\Config::set(include(__DIR__.'/application/extra/mp-queue.php'));(new \MPQueue\Console\Application())->run();
<?php//application/job/HelloWord.phpnamespace app\job;use MPQueue\Job;use think\Log;Class HelloWord extends Job{ //handle内可调用thinkphp方法和函数,但handle函数不支持依赖注入传参 public function handle() { var_dump('hello word!'); Log::info('hello word!'); }}
php mp-queue worker:start -d
\MPQueue\Config\Config::set(config('mp-queue'));//配置项设置也可注册在初始化化行为(app_init)中 统一加载 \MPQueue\Queue\Queue::push('test',\app\job\HelloWord::class); |
请发表评论