我想在我们的web项目中实现某种消息队列系统。我只是想知道做这件事的最好方法是什么。它使用MySQL作为数据库系统以PHP(Yii Framework)编写。实现消息队列的最佳方式
的想法:
- 用户1发送一个消息给用户2,但消息将被放置在未来(即2013年2月11日14时31分)
- 用户2接收到该消息从用户1在他/她的收件箱中02-11-2013 14:31收到关于这条新消息的通知邮件。
我想到了2种方法来做到这一点:
插入来自用户1的消息与日期和时间的“信息”表中的信息应交付用户2,用户2只能在该日期和时间小于当前日期和时间时才能读取它(
WHERE addTime <= NOW()
)。将来自用户1的消息插入'messageQueue'表中。这是一个包含所有未来需要放置的消息的表格。 cronjob(每分钟左右运行一次)将把所有消息的日期和时间小于当前时间放入'消息'表中,并从'messageQueue'表中删除它。电子邮件可以直接发送到用户2
缺点:
- 方法1:没办法发送通知邮件到用户2
- 方法2:你将不得不设置一个每分钟运行一次的cronjob(可以在将来以一分钟的精度放置一条消息)。通知电子邮件可以直接发送,但是它会是一个包含大量消息的繁重系统。如果cronjob花费的时间超过一分钟,它将互相重叠,最终导致服务器关闭。
有没有人有任何想法做到这一点?实际上,我正在从服务器/数据库寻找一些推送功能,它告诉我的脚本有一条新消息发送给用户2,并且需要将电子邮件发送给用户2.
的文档你的意思是脚本调用它本身已经完成之后?那么你正在创造一种无限循环。这是一个想法,但听起来好像有很多事情会出错。如果脚本运行两次或脚本以服务器重新启动结束,该怎么办...... – davey
我刚刚给你一个想法:) 仍然正常的CRON工作将是我想这里最好的解决方案。 – Piotr
我知道;)。我们之前使用过它,但必须以微小的精度传递消息。你只能通过让cronjob每分钟运行一次,并可能导致重叠。 – davey