我是反应式编程的新手,因此有一些疑问。
我正在开发一个小型软件。 我想借此机会更好地了解反应式编程。
所以我看了看Spring的项目反应器。 我还使用R2DBC来反应性地访问数据库。
我想知道数据库是否可以通过任何方式响应更改。
或者更确切地说:如果用户将条目保存在数据库中,则应该通知服务器(例如RestController)。
我该怎么做?
相应的控制器,配置,实体等。我已经实现了。
很抱歉拼写错误。
补全:然后由服务器发送事件对前端进行更新。
答案 0 :(得分:1)
我的理解是反应堆无法独自为您解决此问题。如果您希望您的应用程序对某些数据库更改做出响应(反应),那么您需要确定是谁在进行此更改并在其中实施某种集成。
例如,如果您要Service1
更新数据库,并且Service2
需要响应,那么Service1
可以调用Service2
,也可以从{发出事件{1}},并收听来自Service1
的事件。
第一种方法更容易实现,但是它的缺点是将这两种服务结合在一起。第二个实现起来比较棘手,但是服务是分离的。
在两种情况下,反应堆都可以为您提供帮助: 对于事件,reactor可以为您提供监听事件的方法。例如,使用reactor-rabbitmq模块或reactor-kafka。 对于服务到服务的呼叫,如果您使用Spring Webflux,reactor可以为您提供帮助。
也许您可以向我们介绍您的案件,以便我们提供更具体的解决方案?
答案 1 :(得分:1)
基本上,尼克·齐特拉基迪斯(Nick Tsitlakidis)提到的。让我在这里添加一些内容。
典型的数据库查询模式是查询许多记录。当服务器将所有记录发送到您的应用程序后,数据库将以其结果进行响应并指示查询已完成。如果新记录在查询处于活动状态时或在查询完成后到达,则由于隔离的原因,您不会立即看到这些更改,并且在查询完成的情况下,您将不再具有对该查询的引用。
您要询问的功能是事件驱动的数据使用。数据库称此功能为连续查询。某些商店(例如MongoDB with Tailable cursors或Postgres Logical Decoding)具有允许保持游标/查询打开且客户端能够接收连续更新的功能。
Kafka和JMS还遵循通常由侦听器甚至通过响应流使用的发送(消息)的思想。
所以一切都归结为您所使用的技术。