キュー・プロバイダ
キュー・プロバイダは、大量のタスクをエンキューし、指定されたレートでデキューすることができます。同時に発生するタスクの最大数と、1秒あたりにデキューさせたいタスクの数を指定できます。失敗したタスクは、別の デッドレターキュー ここでデキューとリトライができる。
仕組み
キューを作成する際には createQueueを指定します。 maxInflight そして msgPerSecond パラメータを使用する。これらを併用することで、デキューレートをコントロールすることができる。
例えば、キューに maxInflight を1に設定し msgPerSecond を返せば、毎秒タスクがコールバック・エンドポイントに送られます。 2xx ステータスを使用して、キュープロバイダにタスクを受信したことを知らせます。もしプロバイダが 2xx 応答があった場合、そのタスクを失敗とマークする前に3回リトライする。失敗したタスクはデッドレターキューに追加される。
この場合 maxInflight が1に設定された場合、キューは次のタスクに移る前に再試行を待つ。より高い maxInflight の値は、キュー・プロバイダが追加のタスクを同時に送信し、待機することを可能にする。
注: キュープロバイダのペイロード制限は8000バイトです。
機能
list- これにより、作成したキューを一覧することができます。コード・スニペット これ.createQueue- これを使用して、同時実行するタスクの数とデキューレートを制御する。コード・スニペット これ.getQueueDetails- これは、キューの詳細と統計情報を取得します。コード・スニペット これ.updateQueue- を使用して、以前に作成したキューを更新します。コード・スニペット これ.deleteQueue- を使用して、以前に作成されたキューを削除します。コード・スニペット これ.pauseQueue- を使用して、以前に作成したキューを一時停止する。コード・スニペット これ.resumeQueue- これは、以前に一時停止されたキューや、次のようにして作成されたキューを再開します。isActiveに設定する。false.コードスニペットを見る これ.enqueue- 一時停止中のキューにタスクのリストをエンキューする。コード・スニペット これ.enqueueSingle- 以前に一時停止していたキューに、1つのタスクをエンキューする。コード・スニペット これ.deadLetterList- デッド・レター・キューにあるタスクをリストする。コード・スニペット これ.deadLetterDequeue- 失敗したタスクは、あなたが処理できるようにキューから削除される。コード・スニペット これ.
注: を使用する。 vcr.verifyAuth 方法 を使用して、コールバックがCloud Runtime Platformから発信されていることを検証します。
キュープロバイダの初期化
キュープロバイダを使用するには、セッションを使用してプロバイダのインスタンスを作成する必要があります:
const session = vcr.createSession();
const queue = new Queue(session);
ユースケース
例えば、キュー・プロバイダを使ってタスクのキューイングとデキューイングを行う:
app.post('/queue', async (req, res, next) => {
await queue.createQueue(req.body.name, 'execute', {
maxInflight: req.body.maxInflight,
msgPerSecond: req.body.msgPerSecond,
active: true
});
res.sendStatus(200);
});
これは、アクティブなキューを作成し、タスクがキューイングされるとすぐに、キューがその処理を開始することを意味します。非アクティブなキューは resumeQueue.
app.post('/enqueue', async (req, res, next) => {
await queue.enqueueSingle(req.body.name, req.body.data);
res.sendStatus(200);
});
タスクをキューに入れるには enqueueSingle または enqueue をタスクのリストに追加します。タスクは、キューの作成時に指定されたコールバックにペイロードとして送られる JSON オブジェクトであることが期待されます。
app.post('/execute', async (req, res, next) => {
await processTask(req.body);
res.sendStatus(200);
を必ずお返しください。 2xx タスクが正しく処理されていれば、ステータスが表示される。