Limitar o paralelismo
Use uma fila limitada no cliente e envie cada tarefa através de um pedido compatível comum. Isto controla a carga sem pressupor um endpoint de processamento em lote no servidor.
Um modo de processamento em lote do serviço constitui um contrato de API separado: use a respetiva rota e corpo apenas depois de estes serem publicados nas definições da conta ou na especificação.
async function runWithLimit(items, limit, work) {
const results = [];
for (let offset = 0; offset < items.length; offset += limit) {
const group = items.slice(offset, offset + limit);
results.push(...await Promise.all(group.map(work)));
}
return results;
}Controlar a fila
- Crie um ID de tarefa interno que seja determinístico e único dentro de uma execução.
- Divida um conjunto demasiado grande em grupos geríveis.
- Mantenha a falha de um item distinta da falha de toda a fila.
Recolher resultados
Associe um resultado a um ID interno e conserve o estado de cada tarefa.
Não repita automaticamente todas as tarefas: repita apenas falhas transitórias depois de verificar a idempotência.