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.

Asegúrese de que tanto las llamadas a la base de datos como a SQS sean exitosas.

Básicamente, lo que estoy intentando hacer es enviar datos tanto a la base de datos RDS MySQL como a una cola SQS en la capa de aplicación y asegurarme de que ambos sean exitosos.

El flujo es el siguiente: cuando un usuario solicita una API, se llama a una función lambda que inserta datos en la base de datos y también envía un mensaje a una cola SQS que otra función lambda extrae y luego envía los mismos datos a elasticsearch. Estoy utilizando una cola SQS aquí para manejar reintentos y demás.

Para asegurar que este flujo funcione, solo necesito asegurarme de que ambas llamadas a la base de datos y a SQS tengan éxito, de lo contrario, todo esto fallará. Por ejemplo, si la base de datos tiene éxito y la llamada a la cola SQS falló, los datos no llegarán a elasticsearch, por lo que ambos deben tener éxito o fallar juntos.

¿Alguna idea de cómo hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es utilizar la función de transacción de AWS Lambda. Con esta función, puede agrupar varias operaciones de recursos de AWS en una sola transacción, asegurándose de que todas tengan éxito o fracasen juntas.

    Para implementar esto, puede modificar su función Lambda para hacer uso de la función de transacción. Primero comenzaría una transacción llamando a la API begin_transaction. Luego, realizaría la inserción en la base de datos y el envío de mensaje SQS como dos operaciones separadas. Si ambas operaciones tienen éxito, llamaría a commit_transaction para confirmar la transacción, asegurándose de que tanto la inserción en la base de datos como el envío de mensaje SQS se consideren exitosos. Si alguna de las operaciones falla, llamaría a rollback_transaction para deshacer toda la transacción, asegurándose de que ni la inserción en la base de datos ni el envío de mensaje SQS se consideren exitosos.

    Al hacer uso de la función de transacción de AWS Lambda, puede asegurarse de que tanto la inserción en la base de datos como el envío de mensaje SQS tengan éxito o fracasen juntos, asegurando que los datos lleguen hasta Elasticsearch.

Comments are closed.