postgresql - 将 PostgreSQL 通知放入 AWS SQS 队列

标签 postgresql amazon-web-services amazon-sqs amazon-sns

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

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

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

最佳答案

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

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

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

关于postgresql - 将 PostgreSQL 通知放入 AWS SQS 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799300/

相关文章:

json - 将变量传递给 aws cli 内联 json

python - AWS SQS ReceiveMessage 收到的消息少于请求的消息?

postgresql - 如何在 postgreSQL 中获取带条件的最后一个值?

postgresql - 获取JOOQ中两个日期的总和

amazon-web-services - 如何在使用 lambda@edge 调整图像大小时修复拒绝访问错误

amazon-s3 - AWS S3 : how do I see how much disk space is using

java - Amazon RDS 上的 Postgres SSL 不提供公钥?

php - laravel 4队列(SQS和Elasticbeanstalk)无法打开流:Permission denied

sql - 如何在多个表中查找不同的用户

json - 更新 Postgresql 中 JSON 字段中的嵌套标记