首页 > 解决方案 > 如何在 Couchbase 中捕获保存或更新事件

问题描述

当在 Couchbase 中更新或创建文档时,我希望能够进行一些数据操作。

文档可以通过 Sync Gateway 或我们自己的代码到达我们的数据库,该代码从 http 服务流式传输数据。如果有一个地方可以拦截所有更新,那就太好了。

我们正在针对这些数据运行 Spring Boot REST API,因此这将是拥有拦截器/侦听器的好地方。无论哪种方式,我都偏爱 Java 解决方案。

数据以 JSON 格式编写,而不是使用 Spring 实体,因此我不能使用仅侦听 Entity 类上的事件的 ApplicationListener。如我错了请纠正我。我可以找到一些设置 ApplicationListeners 的宝贵示例,所以我在这里可能错了,但我似乎无法让它工作。

我看到有一个 Eventing 服务,您可以在其中编写 Javascript,但出于多种原因,我并不热衷于采用这种方式。我不热衷于跨平台和语言分割我们的 API 代码,不确定我是否可以在我们的系统等上运行事件服务。不过,我还是愿意辩论。

就我所知,这仅剩下 DCP 似乎非常低的水平。 https://blog.couchbase.com/couchbases-history-everything-dcp/但看起来像是工作的工具。

问题:是否有另一种较低级别的方法来捕获 Couchbase 中 JSON 对象而不是 DCP 以外的实体的更新事件。

标签: javaspringcouchbasespring-data-couchbase

解决方案


免责声明:我为 Couchbase 工作并开发 Java DCP 客户端。

如果您已经评估了 Eventing 服务并确定它不符合您的要求,那么Java DCP 客户端可能值得研究,即使它没有得到官方支持。它被用于 Kafka、Spark 和 Elasticsearch(所有这些都是开源的)的官方 Couchbase 连接器使用,并得到积极维护。

如果您只关心应用程序启动后发生的事件,则使用可以像注册回调和启动事件流一样简单。如果您需要记住您在流中的位置并稍后恢复(例如,处理离线时发生的事件),事情会变得有点复杂,但也有针对这种情况的示例代码

DCP 协议本身是有据可查的。如果您决定走这条路,最好至少阅读该文档的架构部分。另请注意,由于不支持 Java DCP 客户端,API 可能会更改,恕不另行通知。(正式支持该库并提供更友好的 API 是我们的长期目标之一,但我们还没有做出任何承诺。)


推荐阅读