なRabbitMQのとしてコマンドキューまたは(パブ/サブまたはSETEX
付き)周りRedisのをラップには、このような単純な作業のためのオーバーヘッドのように思えます。潜在的に比較的長い期間のための
タイムアウトN要求は少し不快に感じるんが、Node.jsのsetTimout()
が実際に基盤となるOSの通知メカニズムを介してタイマーの膨大な量を処理するように設計されてlibuv
でuv_timer
機能のラッパーです。
でも、できるだけシンプルにするために、正確な実装を隠しているラッパーライブラリを使って、良い古いcronジョブを使用します。 node-schedule
のようなもので、ほんの数行のコードで行うことができます。何かが処理中に問題が発生した場合
const schedule = require('node-schedule');
const getRandomMsAmount = (from, to) => {
const minutes = Math.floor(Math.random() * to) + from;
return minutes * 60 * 1000;
};
const getDateAfterMs = (ms) => {
const nowTimestamp = Number(new Date());
return new Date(nowTimestamp + ms);
};
const dueDate = getDateAfterMs(getRandomMsAmount(20, 100));
const emailJob = schedule.scheduleJob(dueDate,() => {
// logging, updating database, etc.
});
、参照先の仕事をキャンセルすることができる。
emailJob.cancel();
も、1人のユーザーが異なるサインアップの場合には複数のメッセージを取得することができますので、私は、あなたの電子メールは、同様にランダムな内容が含まれている願っていますこのような遅れはちょっと迷惑な経験になるかもしれません。
SendGridを使用してテンプレートを作成して、電子メールプロセスが自動化され、電子メールが即座に送信されるようにしてください。あなたが今登録したばかりの新しいサイトを使うのに100分を待っている方がずっと良いユーザーエクスペリエンス。 – VtoCorleone
実際に私はSendGridを使用していますが、電子メールプロセスは自動化されているため、遅延を自動化したいだけです。そして、ボットではなく、人間によって送られたように見せてください。 –
可能であれば、chronジョブはsetTimeoutよりも優れています。 – VtoCorleone