Skip to main content

Google Cloud Pub/Sub

7.1 Topics propuestos​

TopicUso
nexus.purchase-order.requestedEventos de solicitudes validadas para creación en ERP. Publisher principal.
nexus.purchase-order.retryEventos reprocesables tras error temporal (alternativa: re-delivery en subscription requested).
nexus.purchase-order.dlqDead Letter Queue; después de máximos reintentos o errores NO_RETRYABLE.
Recomendación de diseño

Implementar solo 2 topics en MVP: requested y dlq. Los reintentos pueden manejarse con la retry policy de la subscription de requested, en vez de topic de retry adicional (simplifica mantenimiento y monitoreo). Si en el futuro aparecen necesidades de routing complejo, agregar retry topic.

7.2 Envelope estándar (por evento)​

{
"eventId": "1f0c2f04-8243-4c52-9191-5e77c3b0f1e0",
"requestId": "bcd5f9a7-4ced-4d25-bf3f-6ae762f05b41",
"eventType": "PURCHASE_ORDER_REQUESTED",
"partnerId": "GEPP",
"companyId": "ALPURA_MX",
"sourceSystem": "GEPP_ERP",
"timestamp": "2026-08-12T18:00:00.123Z",
"version": "1.0",
"attempt": 1,
"idempotencyKey": "abc...",
"externalReference": "PO-123456",
"payload": {
"purchaseOrder": { "header": {...}, "lines": [...] },
"validationChecksum": "sha256..."
}
}
  • eventType values: PURCHASE_ORDER_REQUESTED, PURCHASE_ORDER_RETRY, PURCHASE_ORDER_FAILED, PURCHASE_ORDER_CREATED (audit).

7.3 Subscription principal (consolidado)​

SubscriptionEnlazada aConsumer
sub-nexus-po-requested-erp-workersnexus.purchase-order.requestedNexus Oracle Fusion PO Worker (HPA por backlog)

7.3.1 Propiedades recomendadas​

PropiedadValor TBDNota
Ack deadline60s TBDAjustar a p99 de Fusion + safety margin
Retention message7 días (default)Ajustar por SLA
Retry policy (subscription)min backoff: 10s, max backoff: 10min. TBDAcotado.
Dead Letter Policytopic nexus.purchase-order.dlq, max delivery attempts: TBD 5-15Acotado.
Ordering keyNO por defectoUsar ordering solo si requieren orden absoluto por partnerId en un use case estricto; en MVP: sin ordering, mejor throughput.
Filter attributesNO en MVPUsar en fases posteriores si hay múltiples workers por ERP
Exactly Once Delivery (Pub/Sub)Evaluar TBDCon processed_event table y idempotent consumer, no es crítico.

7.4 Atributos Pub/Sub (para tracing y filter)​

AttributePropósito
requestIdDepuración y logs
partnerIdMétricas y filtros
eventTypeRuteo futuro
attemptRetry policy y alertas
traceparentW3C Trace Context (propagación OTEL)
tracestateComplementario
Cardinalidad en métricas

Exportar métricas Pub/Sub por subscription_id + partnerId si es requerido; no por requestId/eventId (riesgo cardinalidad).

7.5 Publisher (Outbox Publisher)​

  • Usa Spring Cloud GCP PubSubTemplate con batching configurable TBD.
  • Reintentos al publicar: Resilience4j Retry + exponential backoff.
  • Fallas: mantener outbox_event en PENDING; alerta tras TBD N minutos de lag.

7.6 Consumer (Worker Fusion)​

  • @Acknowledge(Mode.MANUAL): ack después de actualizar estado + processed_event insert en una sola transacción DB.
  • Nack con delay si TEMPORARY_ERROR → reintento por Pub/Sub subscription retry policy o enviar a retry topic; en NO_RETRYABLE → a DLQ + actualiza estado FAILED + integration_error.
  • Bulk processing: opcional; MVP por mensaje.
  • HPA: por metric pubsub.googleapis.com/subscription/num_undelivered_messages.