如何正确使用Postgres触发器中的任务队列

时间:2016-09-17 00:27:15

标签: postgresql triggers rabbitmq celery

我目前的架构有多个带有单点存储的Web应用程序 - 我的postgres数据库。现在,我希望在数据库中发生某些事情时执行某些任务,例如在新用户创建时发送电子邮件,如果某些值已更改则通知管理员等。

因此,天真的方法是创造大量的触发器,这些触发器将特定于每个动作。现在,由于数据库的所有维护和加载,我认为这不是一个好主意。

我也不认为有一个触发器对节点服务器执行LISTEN / NOTIFY也是一个好主意,因为随着事情的扩展,这个解决方案变得很麻烦。

潜在的解决方案是拥有像celery和rabbitMQ这样的任务队列或其他解决方案,并以某种方式从数据库触发器启动任务。它可以扩展,并且在将来可以相对容易管理

我的问题是:将postgresql触发器与像芹菜这样的任务队列集成的适当方法是什么(我对其他建议开放)。我只是不知道我在想它的方式是否合适。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

最佳解决方案是拥有一个单独的进程,可以接收进程间或HTTP通知,指示数据库中可能存在需要处理的数据。

它将处理在流程开始时安排的所有内容,然后在可能存在某些数据时侦听传入通知。

此外,您可以添加偶尔的民意调查,例如每分钟一次。

你应该远离触发器,它们需要一个额外的连接,这个连接本身需要被监视,以防它中断,这反过来使解决方案变得相当复杂。