我目前的架构有多个带有单点存储的Web应用程序 - 我的postgres数据库。现在,我希望在数据库中发生某些事情时执行某些任务,例如在新用户创建时发送电子邮件,如果某些值已更改则通知管理员等。
因此,天真的方法是创造大量的触发器,这些触发器将特定于每个动作。现在,由于数据库的所有维护和加载,我认为这不是一个好主意。
我也不认为有一个触发器对节点服务器执行LISTEN / NOTIFY也是一个好主意,因为随着事情的扩展,这个解决方案变得很麻烦。
潜在的解决方案是拥有像celery和rabbitMQ这样的任务队列或其他解决方案,并以某种方式从数据库触发器启动任务。它可以扩展,并且在将来可以相对容易管理
我的问题是:将postgresql触发器与像芹菜这样的任务队列集成的适当方法是什么(我对其他建议开放)。我只是不知道我在想它的方式是否合适。
感谢您的帮助。
答案 0 :(得分:0)
最佳解决方案是拥有一个单独的进程,可以接收进程间或HTTP通知,指示数据库中可能存在需要处理的数据。
它将处理在流程开始时安排的所有内容,然后在可能存在某些数据时侦听传入通知。
此外,您可以添加偶尔的民意调查,例如每分钟一次。
你应该远离触发器,它们需要一个额外的连接,这个连接本身需要被监视,以防它中断,这反过来使解决方案变得相当复杂。