Skip to content

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.

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-topic

ARN en Staging:

arn:aws:sns:us-east-2:529305108461:categorization-topic

Propósito: Notificar a otros servicios cuando los productos son categorizados según su demanda (categorías A, B, C, Z).

Productores:

  • Caso de uso Categorize a través del SnsCategorizationEventDispatcher

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
}
}

El manejo de errores y reintentos se implementa de la siguiente manera:

  1. 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!`,
      })
      })
  2. 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 mensaje
      return Either.right(response)
      } catch (err) {
      // Manejar error
      return Either.left(new UnexpectedError(errorMessage))
      }
      }
  3. 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.