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