环境: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
最佳答案
答案也发布到 Couchbase 论坛,但复制到这里... http://www.couchbase.com/forums/thread/notify-client-change#comment-1008518
客户端不知道 XDCR 复制,并且没有任何与 XDCR 事件 Hook 。不幸的是,客户端实例无法知道 key 已复制到其集群。
假设 K2 需要对已复制到 C2 的数据进行操作,一个(诚然未经测试的)替代方案是让 C2 复制到 ASP.NET 端点。在这种情况下,您可以使用我最近编写的 Nancy 端点 - http://blog.couchbase.com/xdcr-aspnet-and-nancy .
- K1 将 key 写入 C1
- C1(通过 XDCR)将 key 发送给 C2
- C2(通过 XDCR)将 key 发送到 Nancy 端点
- K2 在 IReplicationHandler 子类内部使用(有关详细信息,请参阅博客)
基本上,在 C1 XDCR 复制到 C2 后,您可以从 C2 推送到您的应用程序,该应用程序将定义 XDCR 端点,可以通过 Nancy 或将代码从我的 Nancy 应用程序复制到您现有的 Web 应用程序中。端点主机并不重要,重要的是 URI(例如/pools)和 JSON 响应。同样,这里的想法是,您将 K2 应用程序视为第三个 XDCR 端点,但只有在 C2 从 C1 获取 key 后才接收 key 。
观察用于指定存储或删除 key 时的持久性要求。例如,您可以要求客户端当且仅当 key 持久保存到其主节点并复制(在内存或磁盘中)到两个副本节点时才认为存储操作成功。 http://www.couchbase.com/docs/couchbase-sdk-net-1.2/couchbase-sdk-net-st ...
关于couchbase - 存储桶内更改的异步客户端通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14393264/