因此,我的一個簡單的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"
}
如果您正在運行多個服務器,要確保可以ping服務器與Gearman的實例之前連接到服務器。 –
目前只有一臺服務器 – Ascherer
您可以發佈回顯行的內容; 'echo'Method:$ method \ t Worker:{$ this-> getName()} \ t Payload:{$ this-> getPayload()} \ t Hash:{$ this-> getHash()} \ n「; '? –