在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:php-gearman-manager开源软件地址:https://gitee.com/inhere/php-gearman-manager开源软件介绍:gearman worker managerphp 的 gearman workers 管理工具。 学习并参考自项目 brianlmoon/GearmanManager, 代码风格有点老了:),并且是以一个文件写一个函数的方式添加job handler. 没有停止等命令。 但是非常感谢这个项目,大部分逻辑思想都来自于它。 功能特色:
获取安装
"require": { "inhere/gearman": "dev-master"},
直接从github拉取 基本命令注意:通过ssh远程执行命令时,须在后面追加 例如:
// 启动php examples/gwm.php php examples/gwm.php start// 后台运行php examples/gwm.php -dphp examples/gwm.php --daemon
php examples/gwm.php stop
若没有启动。则会直接当作 start 命令 php examples/gwm.php restart
// 查看帮助信息 可看到更多的可用选项php examples/gwm.php --help// 打印manager配置信息php examples/gwm.php -D 运行截图: 命令以及选项说明在命令行里使用
root@php5-dev:/var/www/phplang/library/gearman-manager# php examples/gwm.php -hGearman worker manager(gwm) script tool. Version 0.1.0USAGE: php examples/gwm.php {COMMAND} -c CONFIG [-v LEVEL] [-l LOG_FILE] [-d] [-w] [-p PID_FILE] php examples/gwm.php -h php examples/gwm.php -DCOMMANDS: start Start gearman worker manager(default) stop Stop running's gearman worker manager restart Restart running's gearman worker manager reload Reload all running workers of the manager status Get gearman worker manager runtime statusSPECIAL OPTIONS: start/restart -w,--watch Automatically watch and reload when 'loader_file' has been modify(TODO) -d,--daemon Daemon, detach and run in the background --jobs Only register the assigned jobs, multi job name separated by commas(',') // 设定只加载这几个job handler,防止其他的job干扰。测试时很有用, --no-test Not add test handler, when job name prefix is 'test'.(eg: test_job) // 不加载以test为前缀的handler。如在生产环境时 status --cmd COMMAND Send command when connect to the job server. allow:status,workers.(default:status) // 查看job server的信息 --watch-status Watch status command, will auto refresh status.PUBLIC OPTIONS: -c CONFIG Load a custom worker manager configuration file -s HOST[:PORT] Connect to server HOST and optional PORT, multi server separated by commas(',') -n NUMBER Start NUMBER workers that do all jobs -u USERNAME Run workers as USERNAME -g GROUP_NAME Run workers as user's GROUP NAME -l LOG_FILE Log output to LOG_FILE or use keyword 'syslog' for syslog support -p PID_FILE File to write master process ID out to -r NUMBER Maximum run job iterations per worker // 启动多少个worker来做job。这些worker是随机接收并处理job。如需对某个job特殊处理,需单独配置它 -x SECONDS Maximum seconds for a worker to live -t SECONDS Number of seconds gearmand server should wait for a worker to complete work before timing out -v [LEVEL] Increase verbosity level by one. (eg: -v vv | -v vvv) -h,--help Shows this help information -V,--version Display the version of the manager -D,--dump [all] Parse the command line and config file then dump it to the screen and exit. 添加job handler(工作处理器)方法原型: bool BaseManager::addHandler(string $name, mixed $handler, array $opts = [])bool BaseManager::addFunction(string $name, mixed $handler, array $opts = []) // addHandler 的别名方法 参数:
示例: // $mgr 是 inhere\gearman\LiteManager|inhere\gearman\Manager 的实例$mgr->addHandler('test_echo_job', \inhere\gearman\examples\jobs\EchoJob::class);// 对此job特殊设置 - 至少有4个worker做此工作,这些worker也同时会做其它的job$mgr->addHandler('my_job', MyJob::class, [ 'worker_num' => 4, ]);// 对此job特殊设置 - 有2个worker专注做此工作,不接其它的job$mgr->addHandler('my_other_job', MyOtherJob::class, [ 'worker_num' => 2, 'focus_on' => 1, ]);/** * test */$mgr->addFunction('test_reverse', function ($workload){ return ucwords(strtolower($workload));}); manager 配置全部的配置项请查看 job 配置可以针对job进行特殊配置, 下面是可用配置项: // BaseManager::$defaultJobOpt[ // 需要 'worker_num' 个 worker 处理这个 job 'worker_num' => 0, // 当设置 focus_on = true, 这些 worker 将专注这一个job 'focus_on' => false, // true | false // job 执行超时时间 秒 'timeout' => 200,] 内置工具文件日志提供了简单的文件日志记录工具类。
FileLogger::create(__DIR__ . '/logs/jobs', FileLogger::SPLIT_DAY);
... ...FileLogger::info('message', ['data'], 'test_job');FileLogger::err('message', ['data'], 'test_job'); 同时内置了 use inhere\gearman\jobs\UseLogJob;class MyJob extends UseLogJob{ /** * {@inheritDoc} */ protected function doRun($workload, \GearmanJob $job) { $this->info("received workload=$workload"); $this->err("error ..."); echo "receive: $workload\n"; }} 请求转发Job handler提供了请求转发job基类:
若不关注数据格式,仅想异步的执行一些逻辑
针对通用的不在此处关心数据格式的内部接口,即是原样的数据转发 example: $mgr->addHandler('user_api', new StdHostProxyJob('http://user.domain.com'));$mgr->addHandler('goods_api', new StdHostProxyJob('http://goods.domain.com')); in client: $client->doBackground('user_api', [ '_uri' => '/update-info', // will request: http://user.domain.com/update-info 'userId' => 123, // ... ...]);
有一些接口请求特别频繁,不想混杂在上面的项目请求中,以免影响到其他请求。我们可以单独创建一个handler来转发它 example: $mgr->addHandler('refreshToken', new StdApiProxyJob('http://user.domain.com', '/refreshToken')); in client: $client->doBackground('refreshToken', [ 'userId' => 123, 'token' => 'xxdd', // ... ...]); 继承 |
请发表评论