实现消息队列的最佳方式

时间:2013-10-08 12:30:02

标签: php mysql sql yii push-notification

我想在我们的webproject中实现某种消息队列系统。我只是想知道最好的方法是什么。它是用PHP(Yii Framework)编写的,MySQL是数据库系统。

这个想法:

  • 用户1向用户2发送消息,但该消息将在未来放置(即02-11-2013 14:31)
  • 用户2在02-11-2013 14:31收到他/她收件箱中用户1的邮件,并收到有关此新邮件的通知电子邮件。

我想到了两种方法:

  1. 将来自用户1的消息插入“消息”表中,其中包含消息应发送给用户2的日期和时间。用户2只能在此日期和时间小于当前日期时读取它时间(WHERE addTime <= NOW())。

  2. 将来自用户1的消息插入“messageQueue”表中。这是一个包含将来需要放置的所有消息的表。 cronjob(将每分钟运行一次)将所有日期和时间都小于当前时间的消息放入“消息”表中,并将其从“messageQueue”表中删除。电子邮件可以直接发送给用户2。

  3. 缺点:

    1. 方法1:无法向用户2发送通知电子邮件
    2. 方法2:您必须设置每分钟运行一次的cronjob(将来可以以一分钟的精度放置一条消息)。通知电子邮件可以直接发送,但它将是一个包含大量消息的繁重系统。如果cronjob花费的时间超过一分钟,它将相互重叠,最终可能导致服务器关闭。
    3. 有没有人有任何想法这样做?我实际上正在从服务器/数据库中寻找一些推送功能,它告诉我的脚本新的消息被传递给用户2,并且需要将电子邮件发送给用户2。

2 个答案:

答案 0 :(得分:0)

您可以使用CURL代替CRON,它将自行请求您的“CRON JOB SCRIPT”。 它将在之前完成后调用。如果脚本在1分钟左右的时间内运行,您可能想要延迟CURL请求。

答案 1 :(得分:0)

请考虑使用RabbitMQ实施AMQP模型(http://www.rabbitmq.com/)。根据应用程序的上下文,您可能已经暴露了一些“过度杀伤”。

但是,如果您已经确定此消息传递系统必然需要快速增长,那么您可能需要查看php-amqplib的文档