Events
Este documento detalla los mecanismos de mensajería utilizados en el microservicio Inventory Manager, incluyendo el propósito de cada cola, el formato de los mensajes, los servicios que producen y consumen cada cola, y cómo se manejan errores o reintentos.
Visión General
Section titled “Visión General”Inventory Manager utiliza AWS Simple Notification Service (SNS) para implementar un sistema de mensajería basado en el patrón publicador/suscriptor. Este sistema permite notificar a otros servicios sobre cambios en el inventario, como entradas y salidas de productos.
Las notificaciones se envían a temas SNS FIFO (First-In-First-Out), que garantizan que los mensajes se entreguen en el orden en que se publican y que no haya duplicados.
Eventos Transacciones de Entrada
Section titled “Eventos Transacciones de Entrada”Nombre: inventory-manager-input-transaction-topic.fifo
ARN en Producción:
arn:aws:sns:us-east-1:849786826922:inventory-manager-input-transaction-topic.fifoARN en Staging:
arn:aws:sns:us-east-2:529305108461:inventory-manager-input-transaction-topic.fifoPropósito: Notificar a otros servicios cuando se registra una entrada de inventario.
Productores:
- Caso de uso
RegisterInputa través del observadorTransactionEmittery el despachadorSnsInventoryEventDispatcher
Formato del mensaje:
export interface InputTransactionMessage { type: 'InputTransaction' data: { entryId: string transactionId: string productId: string locationId: string locationType: LocationType containerId?: string stock: number description: string transactionQuantity: number timestamp: string expirationDate?: string lot?: string } context: { country: string warehouse: string }}Eventos Transacciones de Salida
Section titled “Eventos Transacciones de Salida”Nombre: inventory-manager-output-transaction-topic.fifo
ARN en Producción:
arn:aws:sns:us-east-1:849786826922:inventory-manager-output-transaction-topic.fifoARN en Staging:
arn:aws:sns:us-east-2:529305108461:inventory-manager-output-transaction-topic.fifoPropósito: Notificar a otros servicios cuando se registra una salida de inventario.
Productores:
- Caso de uso
RegisterOutputa través del observadorTransactionEmittery el despachadorSnsInventoryEventDispatcher
Formato del mensaje:
export interface OutputTransactionMessage { type: 'OutputTransaction' data: Array<{ entryId: string transactionId: string productId: string locationId: string locationType: LocationType containerId?: string description: string stock: number transactionQuantity: number timestamp: string expirationDate?: string lot?: 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:
-
Registro de errores:
- Todos los errores de publicación se registran utilizando el sistema de logging.
- Ejemplo en
src/app/observers/emitters/transaction.ts:this.eventDispatcher.emitInputRegisterEvent(data).catch((err) => {logger.error({event: TransactionEmitter.name,err,msg: (err as Error).message,})})
-
Deduplicación:
- Los temas FIFO garantizan que no haya mensajes duplicados.
- Se utiliza el ID de transacción como ID de deduplicación:
const deduplicationId = event.transaction.id.toString()
-
Agrupación de mensajes:
- Los mensajes se agrupan por EAN del producto para garantizar el orden dentro de cada grupo:
const groupId = event.entry.product.ean.toString()
- Los mensajes se agrupan por EAN del producto para garantizar el orden dentro de cada grupo: