将 PostgreSQL 通知放入 AWS SQS 队列

sfl*_*gen 5 postgresql amazon-sqs amazon-web-services amazon-sns

我正在开发的应用程序使用触发器在系统内发生某些操作时AFTER CREATE/UPDATE/DELETE创建通知。pg_notify目前,我们有一个小型 Node.JS 应用程序,LISTEN用于处理事件,然后立即将它们发布到 AWS SNS 主题,该主题将转发到我们的 SQS 事件队列。从该队列中,我们根据事件触发各种事件(电子邮件、短信、lambda、长时间运行的作业等)。

这种架构运行良好,但位于 PostgreSQL 实例和 SNS 主题之间的 Node.JS 应用程序似乎有点脆弱。我无法真正在两个可用区中运行两个副本,因为消息会重复。

我正在寻找一种更好的方法将这些 Postgres 通知导入 SQS。有什么选择吗?如果 Postgres Aurora 有什么东西,我们可能会考虑。

Jus*_*ard 4

LISTEN使用当前用于事件的小型应用程序的策略。只需在该应用程序和您的事件订阅者之间引入重复数据删除步骤即可。这将允许您运行应用程序的多个实例。

例如,您可以使用FIFO SQS 队列。这些会自动删除重复的消息。由于 FIFO 队列无法订阅 SNS,因此您需要将消息直接放入队列,而不是通过 SNS。

或者,您可以使用 DynamoDB 存储最近消息的校验和,如果您的应用程序遇到重复消息,请手动删除它(确保使用条件写入来防止竞争条件)。