Saltar al contenido principal

📦 Ares

📝 Descripción General

Ares es un microservicio encargado de recolectar información de producto desde diferentes fuentes y posteriormente publicar esa información concentrada en varios canales como:

De esta forma, Ares funciona como un hub de información de producto dentro del ecosistema.


🔗 Fuentes de Información

Ares recibe datos de distintos sistemas:

  • PIM → nombre, SKU, imágenes, color, tipo de venta, estado (activo/inactivo).
  • Pricing → MSRP y precio.
  • Williams → cantidad de stock disponible.

click aquí para mas detalle


⚙️ Arquitectura y Tecnologías

  • Lenguaje: Node.js
  • Infraestructura: AWS Lambda
  • Orquestación: Serverless Framework
  • Base de datos: MongoDB
  • Mensajería: RabbitMQ
  • Automatizaciones auxiliares: crontab en servidores externos

Repositorios principales:

  • ms-ares-consumers: lógica que consume información de productos desde las fuentes.
  • ms-ares-reports: lógica de publicación hacia los canales (Typesense, Google Merchant, etc).

⚠️ Antes se usaba Serverless Dashboard para despliegue y monitoreo.
Actualmente:

  • Despliegue → manual, vía CLI de Serverless desde local.
  • Monitoreo → directo en la consola de AWS (sección Lambdas).

🔄 Flujo de Funcionamiento

1. Publicación de eventos de producto

Los sistemas fuente (Gabo, PIM, Pricing) publican eventos de producto en RabbitMQ:

  • Vhost: gaiaRMQProd
  • Queue: .ares.product
  • Formato: JSON con información del producto

2. Forwarding a AWS Lambda

Un job en el servidor gaia-williams-rmq-prod escucha la queue y reenvía los mensajes a la Lambda de consumo usando rabbit-amazon-forwarder.

3. Persistencia en base de datos

La Lambda consumidor:

  1. Recibe el mensaje.
  2. Guarda la información del producto en la base de datos MongoDB de Ares.

4. Publicación en canales externos

  • Un script en el crontab del servidor gaia-backoffice revisa periódicamente la base de datos.
  • Consulta los productos con estado pendiente de publicación, por ejemplo:
    where channels.TYPESENSE.status = PENDING