2014-12-13 120 views
1

讓我們假設,我有一個SMTP服務器,我可以每分鐘發送60封電子郵件(每秒1個)。管理每個用戶的Beanstalkd隊列

如果我有60個用戶希望通過此SMTP服務器發送電子郵件,他們都向我發送了60封電子郵件。

如果我在Laravel中維護1個隊列,則來自#1用戶的所有60封電子郵件將首先被髮送,然後來自用戶#2的所有60封電子郵件將被髮送,等等。用戶#60在開始之前必須等待3,540封電子郵件發送。

我想使用Beanstalkd循環的基礎上,我能想到這樣做的唯一途徑,是保持60管,每一個用戶,但是這需要我跑:

我這裏面臨的問題是,如果用戶#61的跡象了,他管不會被監聽,直到我創建了一個新的命令,像這樣拿起:

php artisan queue:listen --queue=user1,user2,user3,etc,user60,user61 

如果我成長到100萬個用戶,有100萬支管是可取的嗎?

是否有任何簡單的方法可以讓Beanstalkd每管取一個工作,因爲這些管可以在飛行中創建,我永遠不會知道我有多少管?

我面臨的問題是,我在SMTP服務器上有一個瓶頸,所以我需要以循環方式發送這些電子郵件。我可以使用MySQL和Cron Jobs輕鬆實現這一點,但是在使用MySQL作爲排隊系統時,這導致了過去的電子郵件重複。

+0

http://stackoverflow.com/a/23151640/6216可能會幫助很多 – 2014-12-13 09:51:46

+0

可能重複[我應該如何讀取多個隊列,按用戶和優先級按比例?](http://stackoverflow.com/questions/23123052 /如何,應該-I-讀多隊列,按比例通過用戶和優先級) – 2015-08-08 21:33:48

回答

0

簡短的回答,您可以嘗試添加更多的工人,但如果你有在SMTP服務器上的漏斗, 你只需要記住,你與另一個替換一個問題。

Client 1 has 60 emails 
Client 2 has 60 emails and so on ... until client 60 

客戶端1只將一分鐘後發送的第二封電子郵件,因此將需要一個小時,從客戶端發送郵件60 1.

你會使用諸如山魈或Sendgrid服務得到更好的服務,你會有多個服務器發送消息。