2012-10-15 60 views
0

因此,我的一個簡單的gearman系統現在正在運行,並且有一名員工正在運行。Gearman客戶端doBackground總是返回GEARMAN_TIMEOUT

工人基本上只是需要的有效載荷(在這種情況下一個隨機數,並且應該回聲回到屏幕上。字面上的echo,而不會返回到客戶端。

客戶端發送所述隨機數。我試着做一個$client->doBackground('post', 65482, md5(uniqid()));但它與一個47錯誤(GEARMAN_TIMEOUT)每次回來。

getErrNo()返回0,error()回報一些關於GEARMAN_TIMEOUT

然而,當我將其更改爲只$client->do(blah, blah, blah),它工作得很好。

我甚至偶爾看到它當操作員仍Echo的數量,甚至得到超時錯誤後...

public function execute() 
    { 
     $method = 'do'; 
     if(!$this->getBlock()) 
     { 
      $method .= ($this->getPriority() == 'Normal' ? '' : $this->getPriority()) . 'Background'; 
     } 
     else 
     { 
      $method .= $this->getPriority(); 
     } 
     echo "Method: $method \t Worker: {$this->getName()} \t Payload: {$this->getPayload()} \t Hash: {$this->getHash()}\n"; 
     $this->setResult(
      $this->getClient() 
       ->$method(
        $this->getName(), 
        $this->getPayload(), 
        $this->getHash() 
       ) 
     ); 
     if($this->getClient()->returnCode() != GEARMAN_SUCCESS) 
     { 
      echo "Code: " . $this->getClient()->returnCode() . "\t" . GEARMAN_TIMEOUT . "\n"; 
     } 
    } 

呼應回來了

Method: doHighBackground Worker: leadposter Payload: 10930 Hash: 091878f5965e4a1de2992c607b3c562b240792a6

繼承人錯誤信息

["error":"Uecode\GearmanBundle\Gearman\Job":private]=> 
    array(4) { 
    ["attempts"]=> 
    int(3) 
    ["return_code"]=> 
    int(47) 
    ["error_no"]=> 
    int(0) 
    ["error"]=> 
    string(103) "gearman_wait(GEARMAN_TIMEOUT) timeout reached, no servers were available -> libgearman/universal.cc:325" 
    } 
+0

如果您正在運行多個服務器,要確保可以ping服務器與Gearman的實例之前連接到服務器。 –

+0

目前只有一臺服務器 – Ascherer

+0

您可以發佈回顯行的內容; 'echo'Method:$ method \ t Worker:{$ this-> getName()} \ t Payload:{$ this-> getPayload()} \ t Hash:{$ this-> getHash()} \ n「; '? –

回答

0

解決了它。

連接跨越的werent堅持的方法......所以,建立一個服務器池,只是運行作業