es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar base de datos utilizando eventos en Springboot

Tengo el requisito de actualizar una base de datos utilizando eventos en un microservicio de Springboot. Cada microservicio tiene su propia capa persistente. Los microservicios se comunican entre sí utilizando API REST.

Escenario:

Tengo dos microservicios: el microservicio de vendedores con una base de datos de vendedores y el microservicio de pedidos con una base de datos de pedidos. Cuando el microservicio de vendedores recibe una solicitud, actualizará la base de datos de vendedores y también añadirá un pedido en la base de datos de pedidos y todo esto debe realizarse en una sola transacción.

No puedo utilizar una API REST para llamar al servicio de vendedores y actualizar el pedido. Si alguna transacción falla, todo debe ser deshecho. ¿Cómo puedo lograr esto utilizando eventos o algo similar?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para cumplir con este requisito, podemos utilizar una arquitectura orientada a eventos con Apache Kafka como sistema de mensajería; cada microservicio puede producir y consumir temas de Kafka para comunicarse entre sí.

    Cuando el microservicio del proveedor recibe una solicitud, puede publicar un evento en un tema de Kafka, indicando que ha actualizado la base de datos del proveedor. El microservicio de Orden, que está suscrito a este tema de Kafka, recibirá el evento e iniciará una transacción de creación de pedido dentro de su propia base de datos.

    Para asegurarnos de que ambos cambios, tanto del proveedor como de la orden, ocurran en una sola transacción, podemos hacer uso del patrón de Sagas. Una Saga es una serie de transacciones locales coordinadas utilizando mensajes enviados a través de un sistema de mensajería. Podemos implementar una Saga para este caso de uso de la siguiente manera:

    1. El microservicio del proveedor publica un evento en el tema de Kafka del proveedor actualizado.
    2. El microservicio de orden recibe el evento, comienza una transacción de creación de pedido dentro de su propia base de datos y publica un evento de creación de orden con una referencia al evento de proveedor actualizado.

    3. Un gestor de Sagas (un microservicio separado que gestiona las Sagas) recibe el evento de creación de orden y envía un mensaje de confirmación al tema de proveedor actualizado. Este mensaje de confirmación será utilizado por el microservicio del proveedor para confirmar su transacción de base de datos.

    4. Antes de confirmar su transacción de base de datos, el microservicio del proveedor verificará si ha recibido el mensaje de confirmación. Si ha recibido el mensaje de confirmación, aplicará la transacción de la base de datos. Si no ha recibido el mensaje de confirmación, anulará la transacción.

    Al implementar este patrón de Saga con una arquitectura orientada a eventos y Apache Kafka, podemos asegurarnos de que tanto los cambios en el proveedor como en la orden ocurran en una sola transacción, y en caso de fallo, podemos anular toda la transacción.

Comments are closed.