萌新第一次接触 gearman 服务无法使用问题,请问要如何调试才好?

2020-06-18 22:06:17 +08:00
 UnrealEngine

线上有块功能是用 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();

这块功能之前正常,但是换了服务器后这块功能就失灵了。

怎么调试确实不懂,运维也问我怎么测试比较好。

1446 次点击
所在节点    PHP
8 条回复
UnrealEngine
2020-06-18 22:28:14 +08:00
执行 php --info | grep "gearman support"后显示正确安装
couashi
2020-06-19 09:30:22 +08:00
需要安装 gearmand, 安装 gearman 的 php 扩展, 启动 gearmand 服务
UnrealEngine
2020-06-19 10:15:51 +08:00
@couashi gearmand 和 php 的扩展都安装好了的
GuangXiN
2020-06-19 10:47:06 +08:00
换了服务器之后 server ip 变了?
UnrealEngine
2020-06-19 12:45:02 +08:00
@couashi
@GuangXiN 试着调试了下,addtask 没问题,返回了 true,但是 runtasks 的时候返回了 false,但是依然不知道怎么解决
couashi
2020-06-19 18:46:27 +08:00
@UnrealEngine

client.php
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 }
UnrealEngine
2020-07-01 22:44:00 +08:00
@couashi 我有两套代码,都是在同一套服务器不同文件夹下,但是他们 gearman 的 ip 是相同的,然后代码 1 doBackground 时添加的函数会等同于代码 2 里的函数吗?(代码 1 没有这个函数但是代码 2 有)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/682852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX