1

我是响应式编程主题的新手,因此有一些问题。

我正在开发一个小软件。我想借此机会更好地了解响应式编程。

所以我查看了 Spring 的 project-reactor。我还使用 R2DBC 被动地访问数据库。

我想知道数据库是否有任何方式响应更改。

或者更确切地说:如果用户在数据库中保存了一个条目,那么应该通知服务器(例如,RestController)。

我怎么能这样做呢?

对应的控制器、配置、实体等我已经实现了。

抱歉拼写错误。

补充:然后由服务器发送事件对前端进行更新。

4

2 回答 2

2

基本上,尼克 Tsitlakidis 提到了什么。让我在这里补充几点。

典型的数据库查询模式是查询多条记录。一旦服务器将所有记录发送到您的应用程序,数据库就会响应其结果并指示查询已完成。如果在查询处于活动状态或查询完成后有新记录到达,您不会因为隔离而立即看到这些更改,并且在查询完成的情况下,您将不再有对该查询的引用。

您要问的功能是事件驱动的数据消费。数据库将此功能称为连续查询。一些存储(例如带有 Tailable 游标Postgres 逻辑解码的 MongoDB )具有允许保持游标/查询打开并且您的客户端能够接收持续更新的功能。

Kafka 和 JMS 也遵循发送(消息)的想法,这些消息通常由侦听器甚至通过反应流使用。

因此,这一切都归结为您使用的技术。

于 2019-04-03T07:39:03.220 回答
1

我的理解是,reactor 无法单独为您解决这个问题。如果您希望您的应用程序对某些数据库更改做出响应(反应),那么您需要确定谁在进行此更改并在那里实现某种集成。

例如,如果您要Service1更新数据库,并且Service2需要响应,则Service1可以调用Service2,或者,您可以从 发出事件Service1并侦听来自 的事件Service2

第一种方法更简单,更容易实现,但它的缺点是将两种服务耦合在一起。第二个实现起来比较棘手,但服务是解耦的。

Reactor 可以在这两种情况下为您提供帮助:对于事件,reactor 可以为您提供一种监听事件的方法。例如使用reactor-rabbitmq模块或reactor-kafka。对于服务到服务的调用,如果您使用Spring Webflux ,reactor 可以为您提供帮助。

也许您可以告诉我们更多关于您的案例,以便我们提供更具体的解决方案?

于 2019-04-02T12:35:17.620 回答