Proveedor de colas
El proveedor de colas le permite poner en cola grandes cantidades de tareas y, a continuación, retirarlas de la cola a un ritmo determinado. Puede especificar el número máximo de tareas que se realizan simultáneamente, así como el número de tareas que desea que se pongan en cola por segundo. Las tareas que fallen se añadirán a un archivo cola de letra muerta donde se puede poner en cola y reintentar.
Cómo funciona
Al crear una cola, utilizando createQueuese especifica el maxInflight y el msgPerSecond parámetros. Si los utiliza conjuntamente, podrá controlar la velocidad de salida de la cola.
Por ejemplo, si ha creado una cola con maxInflight a 1 y msgPerSecond también se ha establecido en 1, se enviará una tarea a su punto final de devolución de llamada cada segundo, siempre que devuelva un valor 2xx para informar al proveedor de la cola de que ha recibido la tarea. Si el proveedor no recibe un 2xx se reintentará 3 veces antes de marcar la tarea como fallida. Las tareas fallidas se añadirán a la cola de letra muerta.
En este caso, porque maxInflight se estableció en uno, la cola esperará los reintentos antes de pasar a la siguiente tarea. A mayor maxInflight permitiría al proveedor de la cola enviar y esperar tareas adicionales simultáneamente.
Nota: El proveedor de colas tiene un límite de carga útil de 8000 bytes.
Funciones
list- esto le permite listar las colas que ha creado. Vea el fragmento de código aquí.createQueue- utilícelo para controlar el número de tareas que se ejecutan de forma concurrente, junto con la tasa de dequeue. Véase el fragmento de código aquí.getQueueDetails- recupera detalles y estadísticas sobre una cola. Véase el fragmento de código aquí.updateQueue- utilícelo para actualizar una cola creada previamente. Véase el fragmento de código aquí.deleteQueue- utilícelo para eliminar una cola creada previamente. Véase el fragmento de código aquí.pauseQueue- utilícelo para poner en pausa una cola creada previamente. Véase el fragmento de código aquí.resumeQueue- esto reanudará una cola previamente pausada o una cola que fue creada conisActiveajustado afalse. Vea el fragmento de código aquí.enqueue- pone en cola una lista de tareas en una cola previamente pausada. Véase el fragmento de código aquí.enqueueSingle- poner en cola una única tarea en una cola previamente pausada. Véase el fragmento de código aquí.deadLetterList- lista las tareas en la cola de letra muerta. Véase el fragmento de código aquí.deadLetterDequeue- pone en cola las tareas fallidas para que usted las gestione. Véase el fragmento de código aquí.
Nota: Utiliza el vcr.verifyAuth método para verificar que las devoluciones de llamada se originan en Cloud Runtime Platform.
Inicialización del proveedor de colas
Para utilizar el proveedor de colas es necesario crear una instancia del proveedor utilizando una sesión:
const session = vcr.createSession();
const queue = new Queue(session);
Caso práctico
Por ejemplo, para utilizar el proveedor de colas para poner y quitar tareas de la cola:
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);
});
Esto crea una cola activa, lo que significa que tan pronto como las tareas se pongan en cola, la cola comenzará a procesarlas inmediatamente. Una cola inactiva deberá iniciarse utilizando resumeQueue.
app.post('/enqueue', async (req, res, next) => {
await queue.enqueueSingle(req.body.name, req.body.data);
res.sendStatus(200);
});
Puede poner tareas en cola llamando a enqueueSingle o enqueue para obtener una lista de tareas. Se espera que la tarea sea un objeto JSON que se enviará como carga útil a la llamada de retorno especificada al crear la cola.
app.post('/execute', async (req, res, next) => {
await processTask(req.body);
res.sendStatus(200);
Asegúrese de devolver un 2xx si ha realizado correctamente su tarea.