1

Web プロジェクトにある種のメッセージング キュー システムを実装したいと考えています。これを行うための最良の方法は何だろうと思っています。データベース システムとして MySQL を使用して PHP (Yii Framework) で記述されています。

アイデア:

  • ユーザー 1 はユーザー 2 にメッセージを送信しますが、メッセージは将来に配置されます (つまり、2013 年 2 月 11 日 14:31)。
  • ユーザー 2 は、ユーザー 1 からのメッセージを 2013 年 2 月 11 日 14:31 に受信トレイで受信し、この新しいメッセージに関する通知メールを受信します。

これを行うには、次の 2 つの方法を考えました。

  1. ユーザー 1 からのメッセージを、メッセージがユーザー 2 に配信される日付と時刻とともに「メッセージ」テーブルに挿入します。ユーザー 2 は、この日付と時刻が現在の日付と時刻よりも小さい場合にのみメッセージを読むことができます ( WHERE addTime <= NOW())。

  2. ユーザー 1 からのメッセージを「messageQueue」テーブルに挿入します。これは、将来配置する必要があるすべてのメッセージを含むテーブルです。cronjob (約 1 分ごとに実行されます) は、日付と時刻が現在時刻よりも小さいすべてのメッセージを「message」テーブルに配置し、「messageQueue」テーブルから削除します。ユーザー 2 に直接電子メールを送信できます。

短所:

  1. 方法 1: ユーザー 2 に通知メールを送信する方法がない
  2. 方法 2: 毎分実行される cronjob を設定する必要があります (メッセージは 1 分の精度で将来に配置できます)。通知メールは直接送信することもできますが、メッセージが多く重いシステムとなります。cron ジョブに 1 分以上かかる場合、互いにオーバーラップし、最終的にサーバーがシャットダウンする可能性があります。

誰かがこれを行う考えを持っていますか? 私は実際にサーバー/データベースからのプッシュ機能を探しています。これは、新しいメッセージがユーザー 2 に配信され、電子メールをユーザー 2 に送信する必要があることをスクリプトに伝えます。

4

2 に答える 2

0

AMQP モデル ( http://www.rabbitmq.com/ ) を実装する RabbitMQ の使用を検討してください。あなたが公開したアプリケーションのコンテキストを考えると、それは少し「やり過ぎ」かもしれません。

ただし、このメッセージング システムが急速に成長する必要があることが確実にわかっている場合は、php-amqplibのドキュメントを参照してください。

于 2013-10-08T18:37:52.347 に答える
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 に答える