• gearman入门使用


    一、简介

    gearman是可以把工作委派到其它机器或进程的工具。
    官网地址:http://gearman.org/

    Gearman通常由三部分组成,client+worker+任务服务器,由worker执行client发来的job,再通过job server返回给client。Gearman提供了Client、Worker的API,利用这些API来与job server通讯。
    这是工作原理图:
    这里写图片描述

    二、安装

    安装官方指导在:http://gearman.org/getting-started/
    下面介绍在ubuntu的具体安装过程:

    1.在ubuntu14.04,Python-Software-Properties被替换成了Software-Properties-Common.

    sudo apt-get install software-properties-common
    sudo add-apt-repository ppa:gearman-developers/ppa
    sudo apt-get update
    

    2.安装GearmanJobServer、Dev Tools、Perform Upgrade

    sudo apt-get install gearman-job-server libgearman-dev
    sudo apt-get install gearman-tools
    sudo apt-get upgrade
    

    3.如果没有PECL,安装PECL,并使用PECL安装Gearman(CLI,Client,Worker)

    sudo apt-get install php-pear
    sudo apt-get install php5-dev
    sudo pecl install gearman
    

    4.修改php.ini(CLI and Server)to Use Gearman

    sudo vi /etc/php5/cli/php.ini
    

    在Dynamic Extensions里加上:
    extension=gearman.so

    三、在php里使用gearman

    1、php调用gearman的方法

    php查看版本

    <?php print gearman_version() . "
    "; ?>
    运行方式:php test.php
    

    这里写图片描述

    建一个worker

    <?php
        $worker= new GearmanWorker();
        $worker->addServer();
        $worker->addFunction("reverse", "my_reverse_function");
        while ($worker->work());
    
        function my_reverse_function($job){
          return strrev($job->workload());
        }
    ?>
    

    这个运行以后,要ctrl+c终止程序。这段代码建立一个worker对象,添加默认的server,注册reverse的回调函数。程序会进入一个死循环,每当有job进入的时候,回调函数会执行,这里只是简单的把字符串反转,然后返回。

    建一个Client

    client类似worker,建立下面的server.PHP

    <?php
    $client=new GearmanClient();
    $client->addServer();
    print $client->do("reverse","Hello World!");
    ?>
    

    看下执行结果:
    这里写图片描述

    建一个图片resize worker

    <?php
    $worker= new GearmanWorker();
    $worker->addServer();
    $worker->addFunction("resize", "my_resize_function");
    while ($worker->work());
    
    function my_resize_function($job)
    {
      $thumb = new Imagick();
      $thumb->readImageBlob($job->workload());
    
      if ($thumb->getImageHeight() > 600)
        $thumb->scaleImage(0, 600);
      else if ($thumb->getImageWidth() > 800)
        $thumb->scaleImage(800, 0);
    
      return $thumb->getImageBlob();
    }
    ?>
    

    php需要ImageMagick支持,安装方法:

    sudo wget http://www.imagemagick.org/download/ImageMagick.tar.gz
    tar -xzvf ImageMagick.tar.gz
    cd ImageMagick
    sudo ./configure -prefix=/usr/local/imagemagick -enable-lzw -with-modules && make && make install
    

    Resize Client

    这里使用命令的方式调用client

    gearman -f resize < full.jpg > thumb.jpg
    

    2、不使用php ,直接用命令行的方式使用gearman 示例

    启动一个终端运行守护进程

    sudo gearmand --daemon
    

    启动一个worker,这里调用ls命令

    gearman -w -f ls -- ls -lh
    

    启动一个client

    gearman -f ls < /dev/null
    

    可以看到输出结果。
    这里写图片描述

    四、一些基本命令

    /etc/init.d/gearman-job-server status 查看运行状态
    /etc/init.d/gearman-job-server restart 重启 其它还有start stop 命令
    

    这里写图片描述

    在centos下,一般文档介绍使用gearmand -d 启动。有时可能有问题,这时可以使用命令:

    gearmand –log-file gearmand.log –listen 127.0.0.1 –port=4730 –verbose=INFO &

    参考网址:http://gearman.org/getting-started/#client

  • 相关阅读:
    基于Oracle的Mybatis 批量插入
    java.lang.ClassCastException: com.sun.proxy.$Proxy32 cannot be cast to com.bkc.bpmp.core.cache.MemcachedManager
    理解 Mybatis的分页插件 PageHelper
    手机注册获取验证码的PHP代码
    php分页代码简单实现
    PHP简单漂亮的分页类
    PHP实现各种经典算法
    Vue 入门指南 JS
    php 经典的算法题你懂的
    WebService 之 WSDL文件 讲解
  • 原文地址:https://www.cnblogs.com/wepe/p/7424488.html
Copyright © 2020-2023  润新知