Events
Este documento detalla los mecanismos de mensajería utilizados en el microservicio de Product Demand, incluyendo el propósito de cada topic, el formato de los mensajes y los servicios que producen eventos.
Visión General
Section titled “Visión General”El microservicio de Product Demand utiliza AWS Simple Notification Service (SNS) para implementar un sistema de mensajería publicador/suscriptor. Este sistema permite al microservicio notificar a otros servicios sobre la categorización de productos basada en la demanda.
Las notificaciones se envían a topics de SNS, a los cuales pueden suscribirse otros servicios que necesiten reaccionar a eventos de categorización de productos.
Evento de Categorización de Demanda Diaria
Section titled “Evento de Categorización de Demanda Diaria”Nombre: categorization-topic
ARN en Producción:
arn:aws:sns:us-east-1:849786826922:categorization-topicARN en Staging:
arn:aws:sns:us-east-2:529305108461:categorization-topicPropósito: Notificar a otros servicios cuando los productos son categorizados según su demanda (categorías A, B, C, Z).
Productores:
- Caso de uso
Categorizea través delSnsCategorizationEventDispatcher
Formato del mensaje:
export interface DemandPerDayMessage { type: 'DemandPerDayCategory' data: { id: string ean: string isWeighable: boolean warehouse: string demand: number methodUsed: string timestamp: string category: 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 el despachador de eventos:
(await this.publisher.publishMessage(arn, message)).onRight(() => {logger.debug({event: SnsCategorizationEventDispatcher.name,data: message,msg: `Demand per day event published successfully!`,})})
-
Manejo de Errores con Either Pattern:
- El publicador de SNS utiliza el Either Pattern para manejar errores:
async publishMessage<T>(arn: string, message: T): Promise<Either<BusinessError, PublishCommandOutput>> {try {// Publicar mensajereturn Either.right(response)} catch (err) {// Manejar errorreturn Either.left(new UnexpectedError(errorMessage))}}
- El publicador de SNS utiliza el Either Pattern para manejar errores:
-
Estructura del Mensaje:
- Los mensajes incluyen información de contexto (país, almacén) para ayudar con la depuración y el seguimiento.
- El campo type identifica el tipo de evento para un manejo adecuado por parte de los suscriptores.