1

我想在我们的网络项目中实现某种消息队列系统。我只是想知道这样做的最佳方法是什么。它是用 PHP(Yii 框架)编写的,以 MySQL 作为数据库系统。

想法:

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

我想了两种方法来做到这一点:

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

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

缺点:

  1. 方法一:没办法给用户2发送通知邮件
  2. 方法2:你将不得不设置一个每分钟运行一次的cronjob(一条消息可以放在未来,精度为一分钟)。通知邮件可以直接发送,但系统会很繁重,消息很多。如果 cronjob 花费的时间超过一分钟,它将相互重叠,最终可能导致服务器关闭。

有谁知道这样做吗?我实际上是在从服务器/数据库中寻找一些推送功能,它告诉我的脚本一条新消息已传递给用户 2,并且需要向用户 2 发送一封电子邮件。

4

2 回答 2

0

You can use CURL instead of CRON which will self request your "CRON JOB SCRIPT". It will be called after previous is finished. You might wanna delay CURL request if script will run under 1 minute or so.

于 2013-10-08T12:38:28.043 回答
0

请考虑使用 RabbitMQ 实现 AMQP 模型(http://www.rabbitmq.com/)。考虑到您已经暴露的应用程序的上下文,这可能有点“矫枉过正”。

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

于 2013-10-08T18:37:52.347 回答