私はSymfonyにアプリケーションから電子メール/通知を送る必要のあるアプリケーションを持っています。 電子メール/通知送信プロセスには時間がかかるので、キューに入れてキューを定期的に処理することに決めました。したがって、私は電子メール/通知ディスパッチを含むリクエストの応答時間を短縮することができます。PHPでのハンドルキューの競合条件Symfony with MySQL Database
キューを処理するCron Job(PHPスクリプト - Symfonyルート)は、30秒ごとに実行され、キューテーブルからすべてのデータを取得して送信を開始すると、未送信の電子メール/通知があるかどうかを確認します。電子メール/通知が送信されると、キューテーブルの行ステータスフラグが更新され、送信されたことが示されます。
現在、送信に30秒以上かかる可能性のあるメールがキューに追加されています。別のCronジョブも実行を開始し、キューから電子メールを送信し始めます。その結果、電子メール/通知の重複が発生します。
次のようにメールキューのための私のテーブル構造がある次のようにこの問題を解決するために
|-------------------------------------|
| id | email | body | status | sentat |
|-------------------------------------|
私のアイデアは、次のとおりです。
- はcronジョブが実行されているデータベース内のフラグを設定し、フラグが設定されていると他のCronジョブを進めるべきではありません。
- ステータスをすべてのレコードの「送信済み」として更新し、電子メール/通知の送信を開始します。
私の質問は、キューを処理する効率的なアプローチはありますか?このような特定の作業を行うSymfonyバンドル/フィーチャーはありますか?ご提案について
ワーカーのキューイングに興味がある場合は、[Beanstalkd](https://github.com/pda/pheanstalk)を試してみてください。 GentmanとRabbitMQも一般的なメールキューサービスのためには洗練されていますが、新興企業、上司、runit、そしてGearmanとRabbitMQもあります。 –