【问题标题】:Gearman client should throw error when no worker is running当没有工作人员运行时,Gearman 客户端应该抛出错误
【发布时间】:2014-04-30 05:57:48
【问题描述】:

如果没有工作人员正在运行,那么 gearman 客户端如何抛出错误。我添加了失败的回调,但它仍然没有给我失败的响应。请看下面的代码

client.php

   $client = new GearmanClient();
   $complete = 0;
   $fail = 0;
   $client->addServer($server, $server_port);

   $client->setFailCallback(function () use (&$fail) {
   $fail++;
   error_log(__FILE__." ".__LINE__." :FAILED: \n",3,"/var/www/tmp.txt");       
 });
 $client->doLowBackground("write_log");
 $exec = exec('gearadmin --workers | grep pushers_', $output, $res);
 $pri = $client->runTasks();

 if ($client->returnCode() != GEARMAN_SUCCESS)
 {
   error_log(__FILE__." ".__LINE__." :STARTED: ".$client->returnCode()." \n",3,"/var/www/tmp.txt");
   echo "bad return code\n";
   exit;
 }

我怎么知道即使 gearman 服务器正在工作但没有启动工作程序,那么如果客户端调用我应该如何知道没有工作程序正在运行。

【问题讨论】:

  • 当工人再次开始运行时,Gearman 正在执行作业。非常抱歉这个问题。我不知道。直到那时它被保存在队列中。但是我可以测试 Gearman 作业失败的时间吗?
  • 对于后台作业使用jobStatus 方法。相关问题:stackoverflow.com/questions/21656299/…

标签: php gearman


【解决方案1】:

Gearman 充当作业排队引擎。因此,当没有工作人员在运行时,该作业仍保留在队列中但不会出错,这是系统的一个特意设计的功能,以便如果您出于某种原因(例如代码重构、维护等)需要使工作人员脱机,作业仍然可以提交给 gearman 并等待工作人员重新初始化。如果您需要监控 gearman,您可以使用 gearmand 查询来获取可用工作人员的列表,这将返回 gearman 服务器上可用工作人员的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2019-11-16
    • 2012-05-12
    相关资源
    最近更新 更多