2017-08-12 106 views
0

我的應用程序,應根據像一些間隔方式通知用戶:策略發送延遲推

Event 
    > Pushes 
      Pattern: Immediately - 3 day - 7 day - 12 day 

如果用戶所做的事件採取行動推動應該停止此事件。發生事件時可能會發送多個相同類型的事件。
另外我不想打擾用戶例如當有5個事件發送x5更多的推,但通過發送一個推例如提醒:應該發生第二天(或其他間隔)你有5個事件'。

所以現在我決定這種解決方案,當發生事件時,插入到db中所有推送的事件都應該以後用datetime發送。如果用戶採取行動,則將標記推送爲此事件的冗餘。並且在發送分析間隔之前,例如在下一個24小時內全部推送,發送一個並將所有其他發送標記爲已發送。

可以,或者存在更好的解決方案嗎?

回答

0

我有經驗與你建立同樣的應用程序。什麼我做我的是:

CMS - > Redis的 - >工人

  • CMS,用於創建推送通知的內容,包括時間,當這些內容應該被髮送
  • Redis的,用於存儲所述延遲作業數據
  • 工人,PHP應用The n從Redis提取延遲的工作數據。我在這裏使用Laravel,我從Laravel queue delayed dispatching中獲益。

此前我嘗試使用數據庫和消息代理SQS作爲隊列驅動程序。爲什麼我切換到redis?首先,當我使用數據庫時,由於我的隊列數據流量非常大,所以成本太高。然後,當我使用SQS時,它比數據庫更好,但SQS無法保存數週齡的延遲數據。所以我最後的選擇是Redis。當然,我們可以使用另一種服務,如Rabbitmq