Events
Este documento detalla las colas y eventos utilizados en el worker de recolección de logística inversa.
Visión General
Section titled “Visión General”El worker de recolección de logística inversa utiliza AWS Simple Queue Service (SQS) para implementar un sistema basado en mensajes. El worker consume mensajes de una cola SQS, los procesa y crea elementos de logística inversa basados en el contenido del mensaje.
Evento de Suministro Obsoleto
Section titled “Evento de Suministro Obsoleto”Nombre: collector-queue
ARN en Producción:
arn:aws:sqs:us-east-1:ACCOUNT_ID:collector-queueARN en Staging:
arn:aws:sqs:us-east-2:ACCOUNT_ID:collector-queuePropósito: Recibir notificaciones sobre suministros obsoletos que necesitan ser procesados para logística inversa.
Consumidores:
- CollectorWorker a través de AwsQueueService
Formato del mensaje:
export interface SupplyEventMessage { type: 'SupplyDeprecated' data: { _id: string orderId: string barcode: string items: Array<{ ean: string quantity: number zone: string }> samplings: Array<{ ean: string quantity: number zone: string }> } context: { country: string warehouse: string }}Manejo de Errores y Reintentos
Section titled “Manejo de Errores y Reintentos”El manejo de errores y reintentos se implementa de la siguiente manera:
-
Tiempo de Visibilidad del Mensaje:
- Los mensajes tienen un tiempo de visibilidad de 30 segundos, durante los cuales no son visibles para otros consumidores.
- Si el procesamiento falla, el mensaje se vuelve visible nuevamente después del tiempo de espera.
-
Clasificación de Errores:
- Algunos errores se consideran no críticos (por ejemplo,
EventTypeUnprocessableError,WarehouseNotEnabledError,ReverseLogisticsItemAlreadyExistsError) y el mensaje se elimina de la cola. - Otros errores se consideran críticos y el mensaje no se elimina, permitiendo que sea reintentado más tarde.
- Algunos errores se consideran no críticos (por ejemplo,
-
Logging:
- Todos los errores se registran con el contexto apropiado para solución de problemas.
- Ejemplo en
worker.ts:logger.error({event: CollectorWorker.name,data: { processingTime },err,msg: `Error processing events!`,})