【问题标题】:Postgresql triggers a java function in QuarkusPostgresql 在 Quarkus 中触发一个 java 函数
【发布时间】:2022-01-04 13:48:41
【问题描述】:

我在客户端和服务器之间有一个 websocket 连接。我的服务器也已链接并连接到数据库(postgresql)。

我的问题是:有没有办法让从数据库到服务器的事件触发器,让服务器可以根据那个事件启动一个方法。

我在这个项目中使用 Quarkus。我的服务器端是使用 netty socket.io 编写的,我的客户端是使用 socket.io-client-java 编写的。

如果您需要任何详细信息,请告诉我。

【问题讨论】:

  • 你的具体用例是什么?你打算在 postgres 中触发哪个事件?
  • @triplem 我计划在向我的表中添加新数据时触发一个事件,就好像它会说“嘿,有新数据,您需要检查并检索它”。我需要知道新数据何时存储,以便我的应用程序实时运行。这些数据将由服务器获取并发送给客户端,以便他可以使用它
  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 如下面的答案所示,有一些方法可以做到这一点。问题是,如果这真的是要走的路。在一个完美的世界里,你会从应用程序发送一个事件写入数据库(这应该只是你的应用程序)并获取这个事件以通过 web-sockets 将它发送到客户端应用程序。

标签: java sql postgresql triggers quarkus


【解决方案1】:

PostgreSQL 提供了编写自己的触发函数的可能性,例如:用于调用后端应用程序的端点(请参阅Calling RESTful Web Services from PostgreSQL procedure/function,postgres 附加组件也允许使用各种语言编写函数)。

但是,如果您有多个后端实例正在运行,这当然是不够的,因为所有这些实例都需要得到通知。相反,可以使用发布-订阅消息代理(例如https://nats.io/,仅举一个例子)来通知所有感兴趣的后端实例。

在任何情况下,都值得评估new-data-available-event 是否也可以在数据更改时从后端实例创建,这样就不需要编写(繁琐的)触发函数由数据库执行。

实现更改通知的另一个(设置简单)选项也可以是轮询数据库并检查是否发生更改(例如,使用某种廉价的更新计数器/时间戳)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多