我有一种情况,如果用户已经添加到我的postgreSQL数据库中的特定表中,我想向用户发送通知。
我正在使用pg_notify将json有效负载发送到已实现pg客户端以侦听通知通道的NODE.js服务器。这很好用。
我无法决定如何最好地通知postgres服务器某人正在收听并且收到并正在处理通知。理想情况下,我希望使用相同的通道让客户端通知服务器。但是,据我了解,postgres服务器只会充当频道的中心,只需从客户端接收通知并将其推回到所有其他订阅的侦听器。
实际情况如此吗?我可以在postgres服务器上构建一个由通道上的传入通知触发的功能吗?
我遇到的唯一其他解决方案是在表中有一列记录已收到通知,并在收到通知时让Node.js服务器更新表,但这需要额外的连接我想避免。
对此有任何想法或经验将不胜感激。
答案 0 :(得分:0)
解决方案取决于不错过通知的重要性。
不,Postgres没有监听来自客户端的通知的功能,但是如果你连接到Postgres服务器,你可以直接做你需要做的事。
Postgres不是消息队列。它让你听到/通知你可以建立更复杂的东西,但除非你真的知道你在做什么,否则我不建议这样做。
如果您需要有保证的消息传递,消息路由,那么最好使用像RabbitMQ这样的真实消息队列。
例如,您可以让一个简单的应用程序侦听来自Postgres的通知,并将它们放在一个消息队列中,该消息队列会保留消息,直到有人读取并确认消息为止。
如果该应用程序失败,您将错过消息,因此如果您需要更好的保证,您可以在Postgresql中使用触发器将消息放入表中作为备份。