2

环境:C# Winforms,SDK 1.2

我是 Couchbase 的新手,所以我可能错过了一些东西。我想要实现的是当文档在被 XDCR 复制后更新时向客户端推送通知。我的用例如下:

  • 两个集群(CL1、CL2),每个集群都有一个节点
  • 两个客户端(K1,K2)使得 K1 连接到 CL1,K2 连接到 CL2
  • K1 对 DocA 进行了更改
  • DocA 通过 XDCR 从 CL1 --> CL2 复制
  • 一旦 DocA 在 CL2 中,客户端 K2 就会收到通知

这是 Observe() 方法可以做的事情还是有另一种方法?使用 TAP 似乎是有风险的,因为它是一个可能会发生变化的内部 API。

--D

4

1 回答 1

2

答案也发布到 Couchbase 论坛,但在这里复制... http://www.couchbase.com/forums/thread/notify-client-change#comment-1008518

客户端不知道 XDCR 复制并且它没有任何挂钩到 XDCR 事件。所以不幸的是,客户端实例无法知道密钥已复制到其集群。

假设 K2 需要对已复制到 C2 的数据进行操作,一个(诚然未经测试的)替代方案是将 C2 复制到 ASP.NET 端点。在这种情况下,您可以使用我最近编写的 Nancy 端点 - http://blog.couchbase.com/xdcr-aspnet-and-nancy

  1. K1 向 C1 写入密钥
  2. C1(通过 XDCR)将密钥发送给 C2
  3. C2(通过 XDCR)将密钥发送到 Nancy 端点
  4. K2 在 IReplicationHandler 子类中使用(有关详细信息,请参阅博客)

所以基本上,在 C1 XDCR 复制到 C2 之后,您从 C2 推送到您的应用程序,该应用程序将通过 Nancy 或通过将我的 Nancy 应用程序中的代码复制到您现有的 Web 应用程序来定义 XDCR 端点。端点主机并不重要,但 URI(例如 /pools)和 JSON 响应很重要。同样,这里的想法是您将 K2 应用程序视为第三个 XDCR 端点,但只有在 C2 从 C1 获取密钥之后才接收其密钥。

Observe 用于指定存储或删除密钥时的持久性要求。例如,您可以要求客户端认为存储操作成功当且仅当密钥被持久保存到其主节点并复制(在内存或磁盘中)到两个副本节点时。http://www.couchbase.com/docs/couchbase-sdk-net-1.2/couchbase-sdk-net-st ...

于 2013-01-18T14:55:27.797 回答