美文网首页
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任务分发队列调试

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