我想在我們的web項目中實現某種消息隊列系統。我只是想知道做這件事的最好方法是什麼。它使用MySQL作爲數據庫系統以PHP(Yii Framework)編寫。實現消息隊列的最佳方式
的想法:
- 用戶1發送一個消息給用戶2,但消息將被放置在未來(即2013年2月11日14時31分)
- 用戶2接收到該消息從用戶1在他/她的收件箱中02-11-2013 14:31收到關於這條新消息的通知郵件。
我想到了2種方法來做到這一點:
插入來自用戶1的消息與日期和時間的「信息」表中的信息應交付用戶2,用戶2只能在該日期和時間小於當前日期和時間時才能讀取它(
WHERE addTime <= NOW()
)。將來自用戶1的消息插入'messageQueue'表中。這是一個包含所有未來需要放置的消息的表格。 cronjob(每分鐘左右運行一次)將把所有消息的日期和時間小於當前時間放入'消息'表中,並從'messageQueue'表中刪除它。電子郵件可以直接發送到用戶2
缺點:
- 方法1:沒辦法發送通知郵件到用戶2
- 方法2:你將不得不設置一個每分鐘運行一次的cronjob(可以在將來以一分鐘的精度放置一條消息)。通知電子郵件可以直接發送,但是它會是一個包含大量消息的繁重系統。如果cronjob花費的時間超過一分鐘,它將互相重疊,最終導致服務器關閉。
有沒有人有任何想法做到這一點?實際上,我正在從服務器/數據庫尋找一些推送功能,它告訴我的腳本有一條新消息發送給用戶2,並且需要將電子郵件發送給用戶2.
的文檔你的意思是腳本調用它本身已經完成之後?那麼你正在創造一種無限循環。這是一個想法,但聽起來好像有很多事情會出錯。如果腳本運行兩次或腳本以服務器重新啓動結束,該怎麼辦...... – davey
我剛剛給你一個想法:) 仍然正常的CRON工作將是我想這裏最好的解決方案。 – Piotr
我知道;)。我們之前使用過它,但必須以微小的精度傳遞消息。你只能通過讓cronjob每分鐘運行一次,並可能導致重疊。 – davey