0
在我的生產環境中,有7個並行服務器。我用的Redis進行郵件隊列這樣的:在許多服務器環境中使用redis發送郵件隊列
$this->getRedis()->lpush('mailsQueue', serialize($mail));
,那就是聽隊列守護進程:
do {
$mail = $this->getRedis()->rpop('mailsQueue');
if ($mail) {
// sending an email
}
usleep(1000);
} while (true);
當守護程序只有一個實例運行它工作得很好。但在生產環境中,每臺服務器都有自己的守護程序服務。這造成了一個問題,即有時候,電子郵件發送幾次。這是因爲有時不僅一個守護進程服務會從「mailsQueue」列表中加載相同的電子郵件。
無論我運行多少個守護程序服務,我如何確保只有一次加載帶有「rpop」的元素?
非常感謝您的幫助!
在一天結束的時候,Redis的不是爲此目的設計的...看看RabbitMQ的或這樣的事情... –