タスクスケジューラ相当のアプリケーションを作ってそちらで管理するという方法が良いですかね。
今回の場合、メッセージを送った時点で常に残日数を7日に戻さなければならないため、既存のタスクスケジューラを使うのは重い作業になってしまって難しいでしょう。
例えば期限で常にソートしたコンテナを管理しておき、その期限が最も低いものだけチェックし、期限が切れていれば各イベントに配送するといったものが妥当な設計でしょうか。
具体的に言えば、Redisのソート済みセット型を使うなどが良いでしょう。
期限をスコアとして登録しておき、その最もスコアの低いデータを一定時間ごとにピークします。
スコアの低いデータの値が現在時刻を割っていたら他のサービスに通知を送りましょう。
メッセージが送られるたびにこのスコア値を新しい期限で更新しておきます。
最低限以下のような3種のメソッドが全て実現されていれば実用に耐えるのではないでしょうか。
// トークルームのIDを渡して期限を更新する
UpdateRoomExpirely(roomId);
// 定期的に実行することで期限切れをチェックするメソッド
Check();
// 購入者と販売者の間でやり取りが完了した場合にルームをクローズする
CloseRoom(roomId);
これと同じように催促メールを管理するサービスも作りましょう。
// 購入者のIDを渡して24時間後に期限を設定する
SetReminder(buyerId);
// 定期的に実行することで期限切れをチェックするメソッド
Check();
// 購入者の催促メール設定を解除する
UnsetReminder(buyerId);
なお、24時間、とか7日間、という値を渡していないのは、サービス側の実装で処理すべきことだと思われるからです。
PHPでどこまでこういった処理ができるのか僕には分からないんですが、常駐アプリケーションを1つ作ってしまった方が簡単だと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/08 07:37
2017/03/08 07:58
2017/03/08 09:18