如何在 Couchbase 中捕获保存或更新事件
How to capture save or update events in Couchbase
我希望能够在 Couchbase 中更新或创建文档时进行一些数据操作。
文档可以通过 Sync Gateway 或我们自己的代码(从 http 服务流式传输数据)到达我们的数据库。如果有一个地方我可以拦截所有更新,那就太好了。
我们正在 运行针对此数据 Spring 引导 REST API,因此这将是拥有 interceptor/listener 的好地方。无论哪种方式,我都倾向于 Java 解决方案。
数据被写成 JSON 而不是使用 Spring 实体,所以我不能使用只监听实体 类 上的事件的 ApplicationListener。如果我错了纠正我。我可以找到很少的设置 ApplicationListeners 的例子,所以我在这里可能是错的,但我似乎无法让它工作。
我看到有一个 Eventing 服务,您可以在其中编写 Javascript,但出于多种原因,我不想那样做。我不热衷于跨平台和语言分割我们的 API 代码,不确定我是否可以 运行 我们系统上的事件服务等。再一次,我愿意争论。
据我所知,DCP 的水平似乎很低。
https://blog.couchbase.com/couchbases-history-everything-dcp/ 但看起来像是完成这项工作的工具。
问题:对于 JSON 对象而非 DCP 以外的实体,是否有另一种更低级别的方法来捕获 Couchbase 中的更新事件。
免责声明:我在 Couchbase 工作并开发 Java DCP 客户端。
如果您已经评估了 Eventing 服务并确定它不符合您的要求,那么 Java DCP client 可能值得研究,即使它不是官方支持的。它被用于 Kafka、Spark 和 Elasticsearch(所有这些都是开源的)的官方 Couchbase 连接器使用并得到积极维护。
如果您只关心自您的应用程序启动以来发生的事件,使用方法可以像 registering a callback and starting the event stream. Things get a bit more complicated if you need to remember your place in the stream and resume later (to process events that occurred while you were offline, for example), but there's example code for that case too.
一样简单
DCP 协议本身就是 well documented。如果您决定走这条路,最好至少阅读该文档的 Architecture 部分。另请注意,由于 Java DCP 客户端不受支持,因此 API 可能会更改,恕不另行通知。 (正式支持图书馆并提供更友好的 API 是我们的长期目标之一,但我们还没有做出任何承诺。)
和 David 一样,我也在 Couchbase 担任 Eventing 服务的产品经理。
I would like to be able to do some data manipulation when documents are updated or created in Couchbase.
事件当然允许任何人通过微小的 JavaScript 片段响应突变(插入或更新插入)并对其执行数据操作。只需查看文档中的 couchbase-eventing-small-scripts-that-solve-big-problems for a quick introduction and also the eventing-examples。
如果您确实在启用 SGW 的存储桶上使用事件服务路由,您将需要通过 Eventing 内置的 crc64() 函数来抑制重复突变(有关详细信息,请转到 eventing-language-constructs 并搜索:Sync Gateway ).此外,如果在该存储桶上启用了 SGW,您希望让 Eventing 直接更新源存储桶,则有一个更复杂的解决方法(请联系我,我很乐意提供)
接下来您说:
not sure I can run the Eventing service on our systems
事件服务与 Couchbase Enterprise 产品捆绑在一起,它为 运行 简单的 JavaScript 数据或文档片段提供可扩展的基础架构,因为它们无需 SDK 的开销即可更改或变异。您可以将独立的事件节点添加到您的 Couchbase 集群,也可以将事件服务与其他现有节点并置。
我希望能够在 Couchbase 中更新或创建文档时进行一些数据操作。
文档可以通过 Sync Gateway 或我们自己的代码(从 http 服务流式传输数据)到达我们的数据库。如果有一个地方我可以拦截所有更新,那就太好了。
我们正在 运行针对此数据 Spring 引导 REST API,因此这将是拥有 interceptor/listener 的好地方。无论哪种方式,我都倾向于 Java 解决方案。
数据被写成 JSON 而不是使用 Spring 实体,所以我不能使用只监听实体 类 上的事件的 ApplicationListener。如果我错了纠正我。我可以找到很少的设置 ApplicationListeners 的例子,所以我在这里可能是错的,但我似乎无法让它工作。
我看到有一个 Eventing 服务,您可以在其中编写 Javascript,但出于多种原因,我不想那样做。我不热衷于跨平台和语言分割我们的 API 代码,不确定我是否可以 运行 我们系统上的事件服务等。再一次,我愿意争论。
据我所知,DCP 的水平似乎很低。 https://blog.couchbase.com/couchbases-history-everything-dcp/ 但看起来像是完成这项工作的工具。
问题:对于 JSON 对象而非 DCP 以外的实体,是否有另一种更低级别的方法来捕获 Couchbase 中的更新事件。
免责声明:我在 Couchbase 工作并开发 Java DCP 客户端。
如果您已经评估了 Eventing 服务并确定它不符合您的要求,那么 Java DCP client 可能值得研究,即使它不是官方支持的。它被用于 Kafka、Spark 和 Elasticsearch(所有这些都是开源的)的官方 Couchbase 连接器使用并得到积极维护。
如果您只关心自您的应用程序启动以来发生的事件,使用方法可以像 registering a callback and starting the event stream. Things get a bit more complicated if you need to remember your place in the stream and resume later (to process events that occurred while you were offline, for example), but there's example code for that case too.
一样简单DCP 协议本身就是 well documented。如果您决定走这条路,最好至少阅读该文档的 Architecture 部分。另请注意,由于 Java DCP 客户端不受支持,因此 API 可能会更改,恕不另行通知。 (正式支持图书馆并提供更友好的 API 是我们的长期目标之一,但我们还没有做出任何承诺。)
和 David 一样,我也在 Couchbase 担任 Eventing 服务的产品经理。
I would like to be able to do some data manipulation when documents are updated or created in Couchbase.
事件当然允许任何人通过微小的 JavaScript 片段响应突变(插入或更新插入)并对其执行数据操作。只需查看文档中的 couchbase-eventing-small-scripts-that-solve-big-problems for a quick introduction and also the eventing-examples。
如果您确实在启用 SGW 的存储桶上使用事件服务路由,您将需要通过 Eventing 内置的 crc64() 函数来抑制重复突变(有关详细信息,请转到 eventing-language-constructs 并搜索:Sync Gateway ).此外,如果在该存储桶上启用了 SGW,您希望让 Eventing 直接更新源存储桶,则有一个更复杂的解决方法(请联系我,我很乐意提供)
接下来您说:
not sure I can run the Eventing service on our systems
事件服务与 Couchbase Enterprise 产品捆绑在一起,它为 运行 简单的 JavaScript 数据或文档片段提供可扩展的基础架构,因为它们无需 SDK 的开销即可更改或变异。您可以将独立的事件节点添加到您的 Couchbase 集群,也可以将事件服务与其他现有节点并置。