美文网首页
PHP7环境下的Gearman任务分发队列调试

PHP7环境下的Gearman任务分发队列调试

作者: 衣咸 | 来源:发表于2017-06-17 15:26 被阅读940次

其实入门及介绍不想多说,安装这一块也不想多说,单讲下php调试这一块,由于网上及官方既有的一些代码在调试时都会出现如下这一类似的错误:

Fatal error: Uncaught Error: Call to undefined method GearmanClient::do() in /mntxxx/client_gearman.php:4
Stack trace:
#0 {main}
  thrown in /mntxxx/client_gearman.php on line 4

别的环境貌似不会,但php7环境下会出错,下面贴上一段php7环境下Gearman调试无错的代码:
client端:
client.php

<?php
// Name of function
$funcName = 'generateReport';
// Data for function
$data = [
    'report' => 'user_statistic',
];

$client = new GearmanClient();
$client->addServer('127.0.0.1', '4730');

$client->doBackground($funcName, json_encode($data));

Server端:
server.php

<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('generateReport', 'generate');
$worker->work();

function generate($job)
{
    $workload = $job->workload();
    $data = json_decode($workload, true);
    
    // do generate...
    echo "generate... \n";
    sleep(3);
    //set status into db
    echo "set status into db... \n";
    sleep(2);
    echo "done! \n";
}

在命令行先运行处理程序worker端
php server.php

再运行client端
php client.php

下面是返回信息,搞惦:

generate... 
set status into db... 
done! 

至此,该worker端处理器已经完成他的工作,并已关闭,可通过gearadmin状态监测工具进行验证。

gearadmin --status

111.jpg

上面这里,第一列指函数名称注册在服务器; 第二列指队列中的任务数; 第三列指在目前进行的任务数; 第四列指处理器将与工作任务的数量。

如果再次运行客户端,你可以看到任务的队列数量将增加:

php server.php
gearadmin --status
generateReport    1    1    1
gearadmin --status
generateReport    0    0    0
php server.php
 gearadmin --status
 generateReport 1 1 1
 gearadmin --status
 generateReport 0 0 0 

gearadmin 工具,可以用
--workers参数查看当前多少个worker都什么函数

11.png

--status参数查看当前多少个worker启动项

22.png

其他选项看下表

33.jpg

相关文章

  • PHP7环境下的Gearman任务分发队列调试

    其实入门及介绍不想多说,安装这一块也不想多说,单讲下php调试这一块,由于网上及官方既有的一些代码在调试时都会出现...

  • Laravel队列

    步骤: 驱动选择在.env环境中修改QUEUE_DRIVER=database来实现 定义任务 分发任务 启动队列...

  • 13.队列

    队列分发 1.// 这个任务将被分发到默认队列...Job::dispatch();// 这个任务将被发送到「em...

  • Gearman——分布式任务分发框架

    工作中我们有时候会遇到比如需要同时发布数据到多个个服务器上,或者同时处理多个任务。可以使用PHP的curl_mul...

  • Celery初体验

    Celery与任务队列 Celery是Python中流行的分布式任务队列。所谓分布式任务队列,是一种将任务分发到不...

  • Gearman入门及使用(JAVA调用)

    前言因为新公司用了这个框架做任务分发,所以我才有机会知道并学习!那么Gearman到底是个什么样子的框架或系统呢?...

  • iOS OS X 和 iOS 中的多线程技术-4.1 (GCD)

    //联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一、GCD 分发队列 GCD 分发队列是执行任务的有...

  • gcd多线程任务与队列组合分析

    关于gcd中串行队列并行队列,以及同步任务和异步任务的花式嵌套,分析执行结果 多线程调试常用代码: gcd的任务 ...

  • OC 线程笔记

    GCD: 创建任务,添加到队列,GCD自动分发任务 同步/异步同步任务,异步任务的区别: 线程是否要等待任务结束,...

  • Celery 简介

    任务队列 任务队列是一种把任务通过线程或机器进行分发的机制,输入是一个工作单元--任务,工作进程则不断地检查任务队...

网友评论

      本文标题:PHP7环境下的Gearman任务分发队列调试

      本文链接:https://www.haomeiwen.com/subject/rcovqxtx.html