Skip to main content

4. VISIÓN GENERAL DE LA ARQUITECTURA

La arquitectura se basa en un patrón de publicación/suscripción asíncrono utilizando un Message Broker.

  • SPPD actúa como publicador de cambios de productos y suscriptor de respuestas.
  • Power Street actúa como suscriptor de cambios de productos y publicador de respuestas.

4.1 Especificación de Tópicos del Message Broker

Para la comunicación asíncrona entre SPPD y Power Street, se utilizarán los siguientes tópicos en el Message Broker:


🔷 Tópico de Eventos de Producto: product.events.v1

  • Productor Principal: SPPD
  • Consumidor Principal: Power Street
  • Propósito:
    Transportar mensajes que indican creaciones, actualizaciones o bajas de productos originadas en SPPD.
  • Formato de Mensaje: JSON (ver ejemplos más adelante).
  • Estrategia de Particionamiento (solo si se usa Kafka):
    Por productId (o un identificador consistente de producto).
    Esto asegura que todos los eventos para un mismo producto sean procesados en orden por una misma instancia de consumidor en Power Street, evitando condiciones de carrera si el consumo está escalado.
  • Retención: 7 días
  • Versionamiento:
    El sufijo .v1 en el nombre indica la versión del esquema del mensaje o contrato del tópico.

### 4.2 Ejemplo de Mensaje JSON: product.events.v1

Este es un ejemplo de mensaje publicado por SPPD en el tópico product.events.v1 para la operación Alta de Producto:

{
"transactionId": "TXN_SPPD_20250530_00001",
"systemOrigin": "SPPD",
"operationType": "CREATE_PRODUCT",
"retryAttempt": 1,
"timestamp": "2025-05-30T10:00:00Z",
"payload": {
"internalProductId": "SPPD_PROD_A456",
"sku": "SKU_XYZ_001",
"name": "Nuevo Producto de Ejemplo",
"description": "Este es un producto de alta calidad con características innovadoras.",
"price": 99.99,
"currency": "MXN",
"category": "Electrónicos de Consumo",
"stock": 100,
"attributes": {
"color": "Negro",
"material": "Aluminio",
"peso_kg": 0.5
},
"isActive": true,
"dimensions": {
"alto_cm": 10,
"ancho_cm": 5,
"profundidad_cm": 2
},
"tags": ["nuevo", "electronico", "oferta_lanzamiento"]
},
"metadata": {
"userId": "admin_sppd",
"sourceSystemVersion": "SPPD_v2.1"
}
}

Este es un ejemplo de mensaje publicado por SPPD en el tópico product.events.v1 para la operación Cambio de Producto:

{
"transactionId": "TXN_SPPD_20250530_00002",
"systemOrigin": "SPPD",
"operationType": "UPDATE_PRODUCT",
"retryAttempt": 1,
"timestamp": "2025-05-30T10:05:00Z",
"payload": {
"internalProductId": "SPPD_PROD_B789", // ID del producto a actualizar
"name": "Producto Existente - Nombre Actualizado", // Campo actualizado
"price": 149.50, // Campo actualizado
"stock": 75, // Campo actualizado
"attributes": { // Atributos pueden ser actualizados parcial o totalmente
"color": "Plata"
},
"isActive": true
// Solo se envían los campos que cambian o el payload completo según la estrategia de actualización
},
"metadata": {
"userId": "editor_sppd_03",
"changeReason": "Ajuste de precio por promoción"
}
}

Este es un ejemplo de mensaje publicado por SPPD en el tópico product.events.v1 para la operación Baja de Producto:

{
"transactionId": "TXN_SPPD_20250530_00003",
"systemOrigin": "SPPD",
"operationType": "DEACTIVATE_PRODUCT", // Podría ser DELETE_PRODUCT si es eliminación física
"retryAttempt": 1,
"timestamp": "2025-05-30T10:10:00Z",
"payload": {
"internalProductId": "SPPD_PROD_C101",
"isActive": false // Marcando el producto como inactivo
},
"metadata": {
"userId": "supervisor_sppd",
"deactivationReason": "Producto descontinuado"
}
}

🔷 Tópico de Respuestas de Procesamiento: product.responses.v1

  • Productor Principal: Power Street
  • Consumidor Principal: SPPD (Módulo de Integración)
  • Propósito:
    Transportar los acuses de recibo y el resultado del procesamiento (éxito o error) de cada evento por parte de Power Street.
  • Formato de Mensaje: JSON (ver ejemplos más adelante).
  • Estrategia de Particionamiento (solo si se usa Kafka):
    Por transactionId (para distribuir carga de consumo en SPPD),
    o mediante round-robin si SPPD tiene un único consumidor o un pool que pueda manejar respuestas desordenadas
    (la correlación se realiza por transactionId).
  • Retención: 7 días
  • Versionamiento:
    .v1 para reflejar la versión del contrato de este tópico.