postgres 9.4服务器如何知道客户端是否在监听通知信道?

时间:2015-05-14 19:26:04

标签: postgresql notifications

我有一种情况,如果用户已经添加到我的postgreSQL数据库中的特定表中,我想向用户发送通知。

我正在使用pg_notify将json有效负载发送到已实现pg客户端以侦听通知通道的NODE.js服务器。这很好用。

我无法决定如何最好地通知postgres服务器某人正在收听并且收到并正在处理通知。理想情况下,我希望使用相同的通道让客户端通知服务器。但是,据我了解,postgres服务器只会充当频道的中心,只需从客户端接收通知并将其推回到所有其他订阅的侦听器。

实际情况如此吗?我可以在postgres服务器上构建一个由通道上的传入通知触发的功能吗?

我遇到的唯一其他解决方案是在表中有一列记录已收到通知,并在收到通知时让Node.js服务器更新表,但这需要额外的连接我想避免。

对此有任何想法或经验将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决方案取决于不错过通知的重要性。

不,Postgres没有监听来自客户端的通知的功能,但是如果你连接到Postgres服务器,你可以直接做你需要做的事。

Postgres不是消息队列。它让你听到/通知你可以建立更复杂的东西,但除非你真的知道你在做什么,否则我不建议这样做。

如果您需要有保证的消息传递,消息路由,那么最好使用像RabbitMQ这样的真实消息队列。

例如,您可以让一个简单的应用程序侦听来自Postgres的通知,并将它们放在一个消息队列中,该消息队列会保留消息,直到有人读取并确认消息为止。

如果该应用程序失败,您将错过消息,因此如果您需要更好的保证,您可以在Postgresql中使用触发器将消息放入表中作为备份。

相关问题