线上有块功能是用 gearman 任务分发来完成的,但是之前负责这块的员工已经离职了,运维也不清楚这一块,所以第一次接手是一头雾水。
核心代码如下(原代码比较冗长,我这里就缩写了):
$worker = new GearmanClient();
$worker->addServer('10.0.0.5', 4730);
$worker->setCompleteCallback("complete");
$worker->addTask('doSomething', 'yes', null, $id);
$worker->runTasks();
$result = $worker->getResult();
这块功能之前正常,但是换了服务器后这块功能就失灵了。
怎么调试确实不懂,运维也问我怎么测试比较好。
1
UnrealEngine OP 执行 php --info | grep "gearman support"后显示正确安装
|
2
couashi 2020-06-19 09:30:22 +08:00
需要安装 gearmand, 安装 gearman 的 php 扩展, 启动 gearmand 服务
|
3
UnrealEngine OP @couashi gearmand 和 php 的扩展都安装好了的
|
4
GuangXiN 2020-06-19 10:47:06 +08:00 via Android
换了服务器之后 server ip 变了?
|
5
UnrealEngine OP |
6
couashi 2020-06-19 18:46:27 +08:00
|
7
couashi 2020-06-19 18:47:36 +08:00
1 <?php
2 $worker = new GearmanClient(); 3 4 $worker->addServer(); 5 6 $worker->setCompleteCallback("complete"); 7 8 $worker->setCreatedCallback('created'); 9 10 $worker->addTask('doSomething', 'yes', null); 11 12 var_dump($worker->runTasks()); 13 14 function created($task) 15 { 16 print "已创建任务:" . $task->jobHandle(). PHP_EOL; 17 } 18 19 function complete($task) 20 { 21 print "完成:" . $task->data() . PHP_EOL; 22 } server.php 1 <?php 2 $worker = new GearmanWorker(); 3 4 $worker->addServer(); 5 6 $worker->addFunction('doSomething', 'doSomethingFn'); 7 8 print "等待处理...." . PHP_EOL; 9 10 while ($worker->work()) { 11 12 } 13 14 function doSomethingFn($job) 15 { 16 print "已收到,正在处理..". $job->handle() . PHP_EOL; 17 $workload = $job->workload(); 18 $workload_size = $job->workloadSize(); 19 20 print "Workload: $workload ($workload_size)" . PHP_EOL; 21 22 $result = "doSomething | " . $workload; 23 print "处理完成,返回结果: " . $result; 24 return $result; 25 } |
8
UnrealEngine OP @couashi 我有两套代码,都是在同一套服务器不同文件夹下,但是他们 gearman 的 ip 是相同的,然后代码 1 doBackground 时添加的函数会等同于代码 2 里的函数吗?(代码 1 没有这个函数但是代码 2 有)
|