反应式编程如何对数据库更改做出反应?

时间:2019-04-01 18:01:40

标签: reactive-programming project-reactor spring-data-r2dbc

我是反应式编程的新手,因此有一些疑问。

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

所以我看了看Spring的项目反应器。 我还使用R2DBC来反应性地访问数据库。

我想知道数据库是否可以通过任何方式响应更改。

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

我该怎么做?

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

很抱歉拼写错误。

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

2 个答案:

答案 0 :(得分:1)

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

例如,如果您要Service1更新数据库,并且Service2需要响应,那么Service1可以调用Service2,也可以从{发出事件{1}},并收听来自Service1的事件。

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

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

也许您可以向我们介绍您的案件,以便我们提供更具体的解决方案?

答案 1 :(得分:1)

基本上,尼克·齐特拉基迪斯(Nick Tsitlakidis)提到的。让我在这里添加一些内容。

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

您要询问的功能是事件驱动的数据使用。数据库称此功能为连续查询。某些商店(例如MongoDB with Tailable cursorsPostgres Logical Decoding)具有允许保持游标/查询打开且客户端能够接收连续更新的功能。

Kafka和JMS还遵循通常由侦听器甚至通过响应流使用的发送(消​​息)的思想。

所以一切都归结为您所使用的技术。