2017-08-17 11 views
1

後、私は(async/awaitを使用して)Koa2/Node.jsのアプリを持っていると私はX分Xがランダムである要求、後にジョブを実行するジョブの数分を実行します分数は20〜100(私は個人的に送信されたようにサインアップして表示させるユーザーに自動ウェルカム電子メールを送信するために使用したい)。のNode.js/Koa2サーバ - 要求

setTimeoutを使用すると、200分のタイマーを設定するのが妥当ですか?もちろん、アプリがクラッシュした場合、メールは送信されませんが、データベース内のすべての登録を追跡するため、まれにクラッシュすることがあります。自分でメールを送信します。

+0

SendGridを使用してテンプレートを作成して、電子メールプロセスが自動化され、電子メールが即座に送信されるようにしてください。あなたが今登録したばかりの新しいサイトを使うのに100分を待っている方がずっと良いユーザーエクスペリエンス。 – VtoCorleone

+0

実際に私はSendGridを使用していますが、電子メールプロセスは自動化されているため、遅延を自動化したいだけです。そして、ボットではなく、人間によって送られたように見せてください。 –

+0

可能であれば、chronジョブはsetTimeoutよりも優れています。 – VtoCorleone

答えて

2

RabbitMQのとしてコマンドキューまたは(パブ/サブまたはSETEX付き)周りRedisのをラップには、このような単純な作業のためのオーバーヘッドのように思えます。潜在的に比較的長い期間のための

タイムアウトN要求は少し不快に感じるんが、Node.jsのsetTimout()が実際に基盤となるOSの通知メカニズムを介してタイマーの膨大な量を処理するように設計されてlibuvuv_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人のユーザーが異なるサインアップの場合には複数のメッセージを取得することができますので、私は、あなたの電子メールは、同様にランダムな内容が含まれている願っていますこのような遅れはちょっと迷惑な経験になるかもしれません。

関連する問題