Gearman任务分配

Gearman 实现多数据库数据同步

测试环境:windows(mysql)+ 虚拟机(ubuntu + mysql)+ PHP

  1:gearman 的官方文档可以了解gearman,在ubuntu中安装gearman :

    sudo apt-get update

    sudo apt-get upgrade

    sudo apt-get install gcc autoconf bison flex libtool make libboost-all-dev libcurl4-openssl-dev curl libevent-dev memcached uuid-dev libsqlite3-dev libmysqlclient-dev

  2:下载gearman

    wget https://launchpad.net/gearmand/1.2/1.1.5/+download/gearmand-1.1.5.tar.gz

  3:解压安装:

    tar xvzf gearmand-1.1.5.tar.gz
    cd gearmand-1.1.5
    ./configure
    make
    make install

如有错误根据错误提示: sudo apt-get install ....等;

  4: 通过pecl 安装gearman (默认你的ubuntu已经安装了php):

    sudo apt-get install php-pear
    sudo pecl install gearman
    sudo gedit /etc/php5/cli/php.ini

在文件末尾添加  extension="gearman.so";

  5: 终端输入: php --info | grep "gearman support"  出现gearman support => enabled  则表示成功!

6:启动gearmand:sudo gearmand -d &

    注意:这时可能会报错:gearmand: Could not open log file "/var/log/gearmand.log", from "/home/cj", switching to stderr. (Permission denied)

    解决方法:

      mkdir -p /usr/local/var/log/
      cd /usr/local/var/log/
      touch gearmand.log

    再次启动:gearmand,通过 ps -ef | grep gearmand 查看gearman的进程。

  7:PHP测试(多服务器数据库数据同步)

    (1)环境:主机windows中安装mysql,设置数据库登录名:cw 和密码 : cw123;

          虚拟机ubuntu安装mysql,设置数据库登陆名:cu  和密码 :cu123。

         在两个数据库中分别建一张表:fb_table(表名)。

    (2)服务端:serverCJ.php:(内容)

      

 1   
 2
 3 <?php
 4
 5 $worker = new GearmanWorker();
 6 $worker->addServer("127.0.0.1",4730);
 7 $worker->addServer("192.168.238.2",4730);
 8
 9 $worker->addFunction(‘func1‘, function(GearmanJob $job){
10
11 $str = $job->workload();
12 $datas = json_decode($str,true);
13
14 $key = $datas["key"];
15 $lang= $datas["lang"];
16 $texts = $datas["text"];
17 $kid = $datas["aid"];
18
19 $con = mysql_connect("192.168.238.2","cw","cw123");
20 if (!$con)
21 {
22 die(‘Could not connect: ‘ . mysql_error());
23 }
24 $sqls = "select count(1) from fb_table where albumkey=‘".$key."‘";
25 $count = mysql_query($sqls,$mycon);
26 if($count>0){
27 $strSql="update fb_table set albumkey=‘$key‘,langcode=‘$lang‘,texts=‘$texts‘,albumid=‘$kid‘";
28 }
29 else{
30 $strSql="insert into fb_table(albumkey,langcode,texts,albumid) values(‘$key‘,‘$lang‘,‘$texts‘,‘$kid‘)";
31 }
32
33 $result=mysql_query($strSql,$mycon);
34 sleep(3);
35 return ‘The user requested (‘.$result.‘) is func1‘;
36 });
37
38 $worker->addFunction(‘func2‘, function(GearmanJob $job){
39 $str = $job->workload();
40 $datas = json_decode($str,true);
41
42 $key = $datas["key"];
43 $lang= $datas["lang"];
44 $texts = $datas["text"];
45 $kid = $datas["aid"];
46
47 $con = mysql_connect("127.0.0.1","cu","cu123");
48 if (!$con)
49 {
50 die(‘Could not connect: ‘ . mysql_error());
51 }
52 $sqls = "select count(1) from fb_table where albumkey=‘".$key."‘";
53 $count = mysql_query($sqls,$mycon);
54 if($count>0){
55 $strSql="update fb_table set albumkey=‘$key‘,langcode=‘$lang‘,texts=‘$texts‘,albumid=‘$kid‘";
56 }
57 else{
58 $strSql="insert into fb_table(albumkey,langcode,texts,albumid) values(‘$key‘,‘$lang‘,‘$texts‘,‘$kid‘)";
59 }
60
61 $result=mysql_query($strSql,$mycon);
62
63 sleep(3);
64 return ‘The user (‘. $result .‘) is func2‘;
65 });
66
67
68 while ($worker->work());
69
70  

        (3) 客户端:clientCJ.php:(内容)

 1 <?php
 2
 3 $client = new GearmanClient();
 4 $client->addServer("127.0.0.1",4730);
 5
 6 $userInfo = $friends = null;
 7
 8 $client->setCompleteCallback(function(GearmanTask $task, $context) use (&$userInfo, &$friends) {
 9     switch($context) {
10         case func1
11             $userInfo = $task->data();
12             break;
13         case ‘func2‘
14             $friends = $task->data();
15             break;
16     }
17 });
18
19 $data=array("key"=>"abcdds","lang"=>"en","text"=>"hellows","aid"=>3);
20 $datas=json_encode($data);
21
22 $client->addTask(‘func1‘, $datas, ‘func1‘);
23 $client->addTask(‘func2‘, $datas, ‘func2‘);
24
25 echo "Fetching...\n";
26 $start = microtime(true);
27 $client->runTasks();
28 $totaltime = number_format(microtime(true) - $start, 2);
29
30 echo "Got user info in: $totaltime seconds:\n";
31 var_dump($userInfo, $friends);

注:在serverCJ中  $worker->addServer("192.168.238.2",4730);   的IP号为本机(windows的ip地址)即链接windows的数据库。

    (4)运行:在终端输入 : php /**/serverCJ.php &   (其中 **为serverCJ 的存放路径);运行服务端

     在打开另一个终端,输入: php /**/clientCJ.php      运行客户端。

     验证数据是否成功插入数据库:在ubuntu中进入数据库查询刚才新建的表 fb_table ,发现插入了一条数据,同样windows主机的数据库一样多了一条数据。!!

总结:实现了php运用gearman分别向两个服务器的数据库插入数据,实现数据同步。当然PHP同样能实现,但效率要慢得多。

    

时间: 2024-08-08 17:39:36

Gearman任务分配的相关文章

gearman mysql持久化

gearman 创建Mysql持久化队列的方式如下: 1. 登入mysql命令行,运行: create database gearman; 2. 启动gearman,命令如下: /usr/local/gearman/sbin/gearmand -p 4730 -L 0.0.0.0 --log-file=/tmp/gearmand-4730.log --pid-file=/tmp/gearmand-4730.pid -q MySQL --mysql-host=localhost --mysql-u

centos6.6中service启动gearman服务

#!/bin/bash # chkconfig: - 85 15 #descrīption: service(/usr/local/gearmand-1.1.12/sbin/gearmand) . /etc/rc.d/init.d/functions start() { echo -n $"Starting $prog" echo -e " gearman : [确定]" /usr/local/gearmand-1.1.12/sbin/gearmand &

centos安装gearman

centos安装gearman post by rocdk890 / 2012-8-4 1:11 Saturday linux技术 发表评论 今天公司让我在服务器上安装gearman,服务器环境是lamp,那gearman是什么?其实这个gearman是一个处理分布式过程通信的健壮系统.它提供了一个通用的应用程序框架,主要用来把任务转发给到其他机器或进程.使用Gearman 能让程序实现并行工作.负载均衡和跨语言调用.它能够用于不同类型的应用程序,从高可用的web站点到数据库复制传输. 系统:c

第九节 任务实例与任务分配

1.JBPM的任务:流程与交互者操作的一种手段 2.任务实例 3.任务分配

Daily Scrum 1 --团队项目所需时间估计以及任务分配

考虑到所有的任务不可能逐一细化分配给成员,我们将需要完成的任务进行了大致的分配.任务所需要的具体实现可以参看<学霸网站NABC> 所需要的总时间一共为44h. 我们会在以后的每日任务中进行细化任务,在细化的过程中可能会导致任务所需时间的增长. -------------------------------------------------------------------------------------------------------------- 在TFS中创建任务并将任务分配给

Gearman简介

gearman,从名字上看叫做"齿轮工",就是通过齿轮把不同的组件组合在一起.通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题.一般会采用RPC风格或者是REST风格的WebService.但是总感觉比较麻烦.gearman就应运而生了,作为一个任务分发架构,它能够轻松的将前端的任务通过Job Server分发给后端的Worker处理.Gearman请求的处理过程涉及三个角色:Client -> Job Server -> Worker. Client:请求的发起

Gearman 安装使用教程

#安装运行依赖 yum install -y boost boost-devel libevent gperf libuuid libuuid-devel #下载最新版 Gearman wget --no-check-certificate https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz ./configure make && make install mkdir -p /usr/loca

gearman在虚拟机上运行没有自动开启的处理

几天来被gearman无响应的问题困扰,后来请教了大神解决.原因是gearman在虚拟机上运行不稳定,无法自动开启,需手动开始,输入图片的两行命令即开始.

Gearman任务分布系统部署windows平台_使用Cygwin

1.下载Cygwin http://www.cygwin.com/ 然后选择 Install from Internet  -> Direct Connection -> 选择第一个网址就行 下面是选择库安装的截图,注意输入你需要的库,然后点击那个skip,看到出现版本号就行 2.安装时候选择库 下面是个人在配置的时候发现需要,当然你也可以编译gearman的时候去发现少那些库,在重新安装cygwin,然后搜索到这些库然后安装就可以了 gcc make libiconv boost libev