繁体   English   中英

实现消息传递队列的最佳方法

[英]Best way implementing messaging queue

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

这个想法:

  • 用户1向用户2发送一条消息,但该消息将被放置在将来(例如02-11-2013 14:31)
  • 用户2在02-11-2013 14:31在其收件箱中从用​​户1接收消息,并接收有关此新消息的通知电子邮件。

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

  1. 将来自用户1的消息插入带有消息应发送给用户2的日期和时间的“消息”表中。仅当该日期和时间小于当前日期和时间( WHERE addTime <= NOW() )。

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

缺点:

  1. 方法1:无法将通知电子邮件发送给用户2
  2. 方法2:您将必须设置一个每分钟运行一次的cronjob(将来可以以一分钟的精度放置一条消息)。 通知电子邮件可以直接发送,但是它将是一个沉重的系统,包含许多消息。 如果cronjob花费的时间超过一分钟,它将相互重叠,最终可能导致服务器关闭。

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

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

请考虑使用RabbitMQ实现AMQP模型( http://www.rabbitmq.com/ )。 鉴于您所揭示的应用程序的上下文,这可能有点“过大”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM