2017-10-10 1 views
0

私はRabbitには本当に新しく、この質問に関連する正確な用語や、これを実行する最良の方法を検索する方法がわかりません ユーザーがページに到達したときに呼び出されるタスクがあります。私はそのページがその日に1回実行されるようにしたい。より多くの人がそのページにアクセスすると、タスクは既に実行されているので実行されません。誰もそのページに行っていない場合、そのタスクは決して実行されません。RabbitMQを最初のメッセージ送信時に1回だけ実行させるにはどうすればよいですか?

誰かが私が何を探していなければならないかについての指導に親切に指摘できますか?

+1

メッセージを管理できないので、RabbitMQ自体はあなたを助けません公開後に待ち行列に入れる。あなたはどこかのフラグを格納する必要があります。同じタスクを持つメッセージが当日キューに発行され、キューにメッセージがない場合にのみメッセージがパブリッシュされます。たぶんセロリにはいくつかの選択肢があるかもしれませんが、わかりません。 1日に実行するタスクがほんのわずかである必要がある場合、RabbitMQの使用は過剰です。あなたの特定のタスクは分かりませんが、データベースを使用するだけでキューブローカーなしで実装する方が簡単でしょうか? – RidgeA

+0

@RidgeA大丈夫です。人々が使用するいくつかのショートカットがあることを期待していました。いや、もともと私はそれをキューなしで持っていたが、それは非常に遅く実行されていた。それで私はそれをウサギに移した。ありがとう! – JamAndJammies

+0

リクエスト処理中に長期のタスクを実行していた可能性がありますか?私の提案は、クライアントに応答を送った後にタスクを実行することでした(cronなど)。また、Redis pub/subは、消費者にメッセージを配信するためのより軽量なソリューションと考えることもできます(失われた購読者を除いてメッセージを公開する場合はRedisに注意してください)。 – RidgeA

答えて

0

Redis(または他のデータベース)にキーを保存し、最後に実行中のタスクのタイムスタンプで値を設定できます。各ページビューで、その値をチェックして現在のタイムスタンプと比較します。同じ日を参照する場合は無視してください。現在の日より古い場合は、値を更新してタスクを開始します。 あなたの仕事がシンプルな小さなウェブサーバー(フラッシュ/ボトル/ ..)と元のトリガーのみのHTTPリクエストでラップすることができます。

+0

@JamAndJammiesあなたは何をしましたか? – ItayB

関連する問題