要件/シナリオ:
たとえば、2018-5-22 13:51:16 に記事を公開するように設定します。
3 日以内にご連絡ください。
メッセージは有効期限が切れると自動的に削除されます。
……
このような要求を待って、ある時点で自動的に何かを行うというものですが、これはキューとは関係ないようですが、ミドルウェアか何かが必要なのか、あるいは常駐プロセスなどが必要なのでしょうか。
実行すべきタスクをテーブルに行ごとに配置し、プロセスを継続的に更新し、時間ノードに一致したタスクを取り出して実行するという理解ですが、このような考えでしょうか?
このシナリオの成熟したソリューションが何で構成されているか知りたいですか?
ありがとう^_^
遅延タスクを使用する、https://github.com/ouqiang/go...
遅延タスクの実装方法
自分で実装するか、タイムホイールまたは小さなルートパイルを使用してください
Redis キースペース通知を使用する
豆の木
ポスターの主なものは、遅延メッセージ キュー サービスである DelayQueue です。具体的なシナリオについては、
1. タオバオの自動注文キャンセルサービス
2. Ele.meの注文SMS通知サービスなどを参照してください。
待機/通知メソッドに基づいてタイマーを実装します。
プログラムを使ってブラッシングを続けるだけ = =
それを解決するには、crontab のスケジュールされたタスクを使用できます。また、Php インターフェイスを毎日、毎時、毎分呼び出されるように設計できます。
時間フィールドを追加し、モデルレイヤーで適切な判断を下します
プログラムのブラッシングですが、データベースの負荷を考慮する必要があります。
すべてのタスクをキューにプッシュし、無限ループでスクリプトをキューから取り出し、時点を比較し、タスクが到着したら実行モジュールにタスクをスローできます。時間が経過していない場合は、反対側に進んで列に並びます。
2つの行列。たとえば、実行するキュー:tasteList、すぐに実行するキュー:runList。
タスクの取得とタスクの実行を別のプロセスに分割します。
1. タスクの取得: スクリプトはループ内のtasteListからタスクをポップし、時点を決定し、時間が経過するとタスクをrunListキューにプッシュします。ポイントより小さい場合は、tasteList へのプッシュを続けます。
2. タスクを実行します。runList をループしてポップし、タスクが存在するとすぐに実行します。
ボリュームが大きい場合は、必要に応じていくつかのプロセスを開くだけでよく、実行を繰り返すことを考える必要はありません。
システムのスケジュールされたタスク機能を使用してスクリプトをトリガーするだけです。スクリプトが何を行うか、そしてそれをどのように実行するかを決定することもできます。上記の回答を参照することもできます。
一般的には、高頻度のスクリプトで十分です (たとえば、1 分に 1 回、または 5 分に 1 回)。スクリプト内で時間が判断され、異なる頻度のタスクが呼び出されます。これは、設定するよりも管理がはるかに簡単です。タスクは頻度ごとに個別にスケジュールされます。
リーリー
または
workerman
swoole
スケジュールタスク機能を使用しますつまり、データを保存してから、それを継続的に検出するスクリプトを作成します。 。たとえば、1分に1回テストします