2017-08-12 102 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