Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb 在多区域写入上改变馈送观测器_Azure Cosmosdb - Fatal编程技术网

Azure cosmosdb 在多区域写入上改变馈送观测器

Azure cosmosdb 在多区域写入上改变馈送观测器,azure-cosmosdb,Azure Cosmosdb,我正在使用多区域写入(和读取)COSMOSDB。我在同一个集合上有多个change feed观察员,每个观察员都更新不同的搜索索引(每个索引都有自己的租约前缀)。默认一致性级别设置为会话 使用SDK v2(并更改提要处理器库v2): 我的日志显示,三分之二的观察员收到了更新文件的旧版本: 时间t1:document1已创建 时间t2(t1后的天):文档1已更新 时间t3: 观察者1收到文件1(t2版本) observer2收到文档1(t1版本) observer3收到文件1(t1版本) 问

我正在使用多区域写入(和读取)COSMOSDB。我在同一个集合上有多个change feed观察员,每个观察员都更新不同的搜索索引(每个索引都有自己的租约前缀)。默认一致性级别设置为会话

使用SDK v2(并更改提要处理器库v2):

我的日志显示,三分之二的观察员收到了更新文件的旧版本:

  • 时间t1:document1已创建
  • 时间t2(t1后的天):文档1已更新
  • 时间t3:
    • 观察者1收到文件1(t2版本)
    • observer2收到文档1(t1版本)
    • observer3收到文件1(t1版本)

  • 问题:changefeed处理器实例是否与特定区域有关联?换句话说,它是否可能从一个区域读取LSN并从另一个区域提取文档?我找不到关于变更提要观察员和多区域的清晰文档。假设处理器实例一旦获得租约,就会一致地观察来自同一区域的更改,这是错误的假设吗?

    接触的区域是默认区域(在多主机情况下,中心区域是门户列表中的第一个区域),除非您在
    collectionInfo
    中指定了首选位置,否则您将在
    中使用FeedCollection

    DocumentCollectionInfo
    有一个
    ConnectionPolicy
    属性,您可以通过
    PreferredLocations
    来定义您的首选项(就像您可以使用普通SDK客户端一样)。参考:

    所有更改都是从该区域提取的,返回的LSN和来自该区域的文档(它们来自相同的更改提要响应)

    一旦观察者获得租约,它将从配置中定义的区域(默认为Hub或您在PreferredLocations中定义的任何区域)读取租约所针对的分区的更改


    编辑:在获得更改后,您是否正在观察者中执行ReadDocument?如果是这样,为了保持会话一致性,您需要从
    IChangeFeedObserverContext.FeedResponse
    (参考)

    中获取SessionToken,谢谢您的回复!这实际上是一个假阴性。另一个地区的观察者仍在使用我们的代码的旧版本,该版本产生的痕迹使我们认为他们看到的是旧版本。
    new ChangeFeedProcessorBuilder()
                        .WithHostName(hostName)
                        .WithProcessorOptions(hostOptions)
                        .WithFeedCollection(collectionInfo)
                        .WithLeaseCollection(leaseInfo)
                        .WithObserverFactory(observerFactory)
                        .BuildAsync();