确保对数据库和 SQS 的调用都成功

Ensure both calls to database and SQS succeed

基本上,我要做的是将数据发送到 RDS MySQL 数据库,并将消息发送到应用层中的 SQS 队列,并确保它们都成功。

流程如下:当用户请求 API 时,将调用 lambda 函数将数据插入数据库,并将消息发送到另一个 lambda 函数拉取的 SQS 队列,然后发送相同的数据弹性搜索。我在这里使用 SQS 队列来处理重试等。

为确保此流程有效,我只需要确保对数据库和 SQS 的调用都成功,否则整个过程都会失败。例如如果数据库成功而对 SQS 队列的调用失败,数据将不会进入 elasticsearch,因此它们应该一起成功或一起失败。

知道怎么做吗?

一旦消息发送到 Amazon SQS 队列,您就无法“撤消”它。因此,我会推荐:

  • 将数据插入数据库
    • 如果失败,请重试几次
    • 如果所有重试都失败,则退出并返回失败状态
  • 发送消息到SQS
    • 如果失败,请重试几次
    • 如果所有重试都失败,则反向插入数据库退出,状态为失败
  • Return 成功状态