【问题标题】:How to capture save or update events in Couchbase如何在 Couchbase 中捕获保存或更新事件
【发布时间】:2018-10-16 21:31:46
【问题描述】:

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

文档可以通过同步网关或我们自己的代码到达我们的数据库,该代码从 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 以外的实体的更新事件。

【问题讨论】:

  • 我很好奇,如果 Couchbase 不完全符合您的要求,您为什么要选择它?问是因为我目前参与的项目也是如此。
  • 感谢您花时间阅读 Q。Couchbase 是给定的,因为涉及到 Sync Gateway 和 Android。
  • 这里有一些很棒的信息。我采用了不同的路径并使用 Kafka 连接器将 Couchbase 服务器中的事件流式传输到 Kafka 主题中,然后我可以将其转发到相关服务。这对我们来说是一个非常可扩展且迄今为止非常可靠的解决方案,但显然依赖于 Kafka 主干。仅供阅读本文的任何人参考。我们使用的 Couchbase 连接器是 Debezium 连接器,无需修改即可使用

标签: java spring couchbase spring-data-couchbase


【解决方案1】:

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

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

如果您只关心应用程序启动后发生的事件,则使用可以像registering a callback and starting the event stream 一样简单。如果您需要记住您在信息流中的位置并稍后恢复(例如,处理离线时发生的事件),事情会变得有点复杂,但有example code for that case too

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

【讨论】:

  • 非常感谢,捕捉离线事件的代码特别有趣,我错过了。我看到其他连接器使用了 DCP,这给了我足够的信心,而且正如您所说,它似乎有据可查。
【解决方案2】:

和 David 一样,我也在 Couchbase 工作,担任 Eventing 服务的产品经理。

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

事件当然允许任何人通过微小的 JavaScript 片段来响应和执行突变(插入或更新插入)的数据操作。只需查看 couchbase-eventing-small-scripts-that-solve-big-problems 的快速介绍以及文档中的 eventing-examples

如果您确实在启用 SGW 的存储桶上使用 Eventing 服务路由,则需要通过 Eventing 内置的 crc64() 函数抑制重复突变(有关详细信息,请转到 eventing-language-constructs 并搜索:Sync Gateway)。此外,如果您想让 Eventing 直接更新源存储桶(如果在该存储桶上启用了 SGW),则还有一个更复杂的解决方法(只需联系我,我很乐意提供)

接下来你说:

不确定我能否在我们的系统上运行 Eventing 服务

Eventing 服务与 Couchbase Enterprise 产品捆绑在一起,它提供了可扩展的基础架构,可以在数据或文档发生更改或变异时在数据或文档上运行简单的 JavaScript 片段,而无需 SDK 开销。您可以将独立的 Eventing 节点添加到 Couchbase 集群,或者将 Eventing 服务与其他现有节点并置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多