En artículos previos sobre Fluent Brighter y sobre la migración del outbox de Postgres a la versión 10 se mostró la integración con RabbitMQ. En esta ocasión te explico paso a paso cómo configurar Postgres para habilitar outbox, inbox y el gateway de mensajería utilizando Fluent Brighter, manteniendo una configuración clara y coherente para entornos de producción.
Requisitos
Necesitarás .NET 8 o netstandard2.0 y los paquetes NuGet siguientes: Fluent.Brighter.Postgres para la integración con Postgres y Paramore.Brighter.ServiceActivator.Extensions.Hosting para ejecutar el Service Activator y orquestar tareas en segundo plano. Con esto tendrás la base para procesar mensajes de forma fiable y transaccional.
Fundamentos de Brighter
Solicitudes comandos y eventos En Brighter defines mensajes como solicitudes. Un comando se dirige a un único consumidor, por ejemplo para procesar un pedido. Un evento notifica a varios interesados, como el caso de pedido confirmado para disparar flujos de notificación o analítica. Esta separación te ayuda a mantener bajo acoplamiento y alta cohesión.
Mapeador de mensajes El mapeador traduce entre tus objetos de dominio y el mensaje que se serializa. Por defecto se usa JSON, pero puedes registrar un mapeador personalizado para controlar cabeceras, metadatos y el contrato del mensaje.
Manejadores de solicitudes Un manejador procesa cada mensaje entrante y aplica la lógica de negocio. Es habitual registrar logs, validar datos y, si corresponde, publicar nuevos eventos tras completar la transacción de negocio.
Configuración de Fluent Brighter con Postgres
Registro en el contenedor Agrega Fluent Brighter en tu contenedor de inyección de dependencias y prepara las secciones de productores y suscripciones. A partir de ahí defines las piezas de Postgres sin repetir la conexión en cada bloque.
1 Registrar suscripciones Crea suscripciones Postgres con AddPostgresSubscription. Define la cola o tópico por evento, el tipo de bomba de mensajes recomendable usar Reactor para maximizar throughput y la política de reintentos. Por ejemplo, puedes escuchar la cola greeting.queue y otra cola farewell.queue, cada una con su handler.
2 Registrar publicaciones Declara publicaciones con AddPostgresPublication para seleccionar qué eventos se enrutan a qué colas. Un patrón frecuente es publicar eventos de dominio como greeting.event.topic y mapearlos a colas específicas por servicio consumidor.
3 Configurar outbox Activa UsePostgresOutbox para garantizar entrega fiable exactly once con la transacción de tu base de datos. Combínalo con UseDbTransactionOutboxArchive para archivar mensajes procesados y UseOutboxSweeper para barrer y enviar mensajes pendientes en segundo plano. Este patrón evita pérdidas cuando el broker no está disponible y mantiene consistencia entre tu estado y los mensajes.
4 Configurar inbox Con UsePostgresInbox habilitas idempotencia y persistencia de mensajes entrantes. El inbox registra cuál mensaje ya fue procesado evitando duplicados tras reintentos o fallos, clave para lograr procesamiento al menos una vez sin efectos colaterales.
5 Configuración unificada con UsingPostgres Para simplificar, usa UsingPostgres y define la conexión una sola vez. Dentro de ese bloque: establece la cadena de conexión, el nombre de la tabla de outbox, activa UseInbox y UseOutbox, registra tus publicaciones por tipo y crea suscripciones con su cola, concurrencia y tipo de bomba de mensajes. Un ejemplo típico es publicar GreetingEvent hacia greeting.queue y FarewellEvent hacia farewell.queue, y suscribirte a ambas con Reactor para consumir de forma eficiente.
Buenas prácticas Crea migraciones para las tablas de outbox e inbox con índices por id de mensaje y estado. Configura un archivado periódico o TTL para mantener las tablas ligeras. Ajusta la concurrencia de los consumidores según la carga y monitoriza métricas de latencia, tamaño de lote y reintentos. Si usas RabbitMQ como transporte, revisa la durabilidad de colas y confirma publicaciones para evitar pérdidas.
Cómo encaja esto en soluciones reales En proyectos de software a medida y aplicaciones a medida, este enfoque con outbox e inbox aporta fiabilidad empresarial y trazabilidad end to end. Si vas a desplegar en la nube, la arquitectura se integra perfectamente con servicios cloud aws y azure y facilita la observabilidad y el escalado horizontal del Service Activator.
Q2BSTUDIO es tu socio tecnológico para diseñar e implementar estas arquitecturas con estándares de calidad y seguridad. Desarrollamos software a medida, impulsamos proyectos de inteligencia artificial e ia para empresas con agentes IA y analítica avanzada, reforzamos ciberseguridad y pentesting, y habilitamos servicios inteligencia de negocio con power bi. Descubre cómo transformamos tu plataforma con nuestro enfoque integral en desarrollo de aplicaciones y software a medida y lleva tu backend a entornos elásticos y seguros con nuestros servicios cloud aws y azure.
Conclusión Con Fluent Brighter y Postgres puedes implementar outbox, inbox y un gateway de mensajería confiable de forma sencilla y extensible. La configuración unificada con UsingPostgres reduce fricción y evita duplicar parámetros, manteniendo flexibilidad para escenarios complejos de publicación y suscripción. Si quieres ver un ejemplo completo en ejecución, revisa la implementacion completa en GitHub en este repositorio. Integra estas prácticas en tu plataforma para ganar resiliencia, trazabilidad y escalabilidad desde el primer día.