2015-11-27 38 views
0

我有一臺運行Beanstalk的服務器,以及一些使用Pheanstalk在PHP中運行worker的獨立服務器。Beanstalk在集中式服務器中,如何避免工人重複工作?

的那一刻起成爲工人的找到工作:

$job = $pheanstalk->watch('tube') 
    ->ignore('default') 
    ->reserve(); 

$data = json_decode($job->getData(), true); 

的那一刻起它刪除作業($pheanstalk->delete($job);),它可以發生幾十秒鐘。

Beanstalk知道工作正在處理中,沒有其他工人會擁有它,否則我會遇到併發問題? (兩名工作人員參加相同的工作)。

謝謝你的幫助。

回答

2

BeanstalkD知道正在處理的工作,所以它不會在另一個工作人員正在處理它時爲其提供服務。

+0

你的回答正是我想聽到的,但是你有鏈接來確認你的答案嗎? –

+1

作業保留後,其狀態更改爲_reserved_。 「保留」命令僅提供_ready_狀態的作業。 https://github.com/kr/beanstalkd/blob/master/doc/protocol.txt –

+0

完美!謝謝 :) –