如何通过ChangeFeed获得有关Cosmos DB变更的通知?

时间:2017-06-12 11:16:34

标签: azure design-patterns azure-cosmosdb

当我浏览MSDN documentation时,我能看到的只是"观察" ChangeFeed上的更改。即使是第一个图表,也只显示来自外部服务(Storm,Azure Functions等)朝向 ChangeFeed。

是否有任何模式(对我来说不明显)我们可以用来获取有关ChangeMed上Cosmos DB变化的通知? 或者确实需要内置支持,例如Azure功能来实现这一目标" PUSH"情景有效吗?

非常感谢

2 个答案:

答案 0 :(得分:2)

最近发布了Azure Cosmos DB Change Feed processor library,以便更轻松地收听Azure Cosmos数据库更改Feed。它处理一组变更提要监听"工人"的自动租赁管理。阅读Cosmos数据库分区;使您能够轻松扩展更改饲料监听工作者的集合。使用此方法,您可以在库的使用者之上构建一个pub / sub模型。

据说,Azure Cosmos DB的更改源+ Azure功能之间的集成位于Azure Cosmos DB路线图(截至当前日期 - 8/5/17),以帮助推动更改更容易实现。尚未公布具体日期;但请继续关注。

答案 1 :(得分:0)

由于现在已经添加了Azure功能支持,并且更改提要处理器库已完全集成在Java / .NET的Azure SQL SDK中,因此希望提供有关此问题的一些更新。

通过使用ChangeFeedProcessor API,很容易在不使用Azure功能的情况下从变更源获取通知-但是请记住,它实际上不是“ PUSH 客户端以轮询方式查询变更Feed的情况!

代码如下:

public static void startChangeFeedProcessor(String hostName, CosmosContainer feedContainer, CosmosContainer leaseContainer) {
  ChangeFeedProcessor.Builder()
    .hostName(hostName)
    .feedContainer(feedContainer)
    .leaseContainer(leaseContainer)
    .options(new ChangeFeedProcessorOptions().leasePrefix("my-lease-prefix")) //not required
    .handleChanges(docs -> {
        for (CosmosItemProperties document : docs) {
            System.out.println("Read document from Change Feed: " + document.toJson(SerializationFormattingPolicy.INDENTED));
        }
    })
    .build()
    .start()
    .subscribe();
}

您可以签出more in-depth details about the Azure CosmosDB Change Feed here