Proveedor de colas
El proveedor «Queue» te permite poner en cola grandes cantidades de tareas y, a continuación, sacarlas de la cola a una frecuencia determinada. Puedes especificar el número máximo de tareas que se pueden ejecutar simultáneamente, así como el número de tareas que deseas que se saquen de la cola por segundo. Las tareas que fallen se añadirán a una cola de mensajes no entregables 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 utilizas conjuntamente, podrás controlar la velocidad de salida de la cola.
Por ejemplo, si has creado una cola con maxInflight a 1 y msgPerSecond Si también se ha establecido en 1, se enviará una tarea a tu punto final de devolución de llamada cada segundo, siempre que devuelvas un 2xx estado para indicar al proveedor de la cola que has 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, dado que maxInflight Si se ha establecido en uno, la cola esperará a que se realicen los reintentos antes de pasar a la siguiente tarea. Un valor más alto 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 8 000 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- Utiliza esto para actualizar una cola creada anteriormente. Consulta el fragmento de código aquí.deleteQueue- Utiliza esto para eliminar una cola creada anteriormente. Consulta 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 que se haya pausado anteriormente o una cola que se haya creado conisActiveajustado afalse. Mira el fragmento de código aquí.enqueue- Añadir una lista de tareas a una cola que se había puesto en pausa anteriormente. 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 comprobar que las llamadas de retorno proceden de la Cloud Runtime Platform.
Inicialización del proveedor de colas
Para utilizar el proveedor de colas, debes crear una instancia del proveedor mediante una sesión:
const session = vcr.createSession();
const queue = new Queue(session);
Caso práctico
Por ejemplo, para utilizar el proveedor de colas con el fin de poner tareas en cola y sacarlas de ella:
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úrate de devolver un 2xx estado si has realizado tu tarea correctamente.