我试图了解通过.NET客户端SDK使用Azure DocumentDb时Sessions Consistency的实际含义,即定义(和绑定)会话的内容。每次我们创建DocumentClient的新实例时都会创建一个新会话,如果我们使用IReliableReadWriteDocumentClient包装器,行为会改变吗?
由于
答案 0 :(得分:9)
是的,每次创建DocumentClient类的新实例时都会创建一个新会话。每个DocumentClient实例都维护一个集合映射 - >会话令牌映射。客户端保存从服务器接收的最新会话令牌,并在读取请求期间将其作为标头(x-ms-sessiontoken)回显。这使DocumentDB能够找到集合的最新副本,以提供会话(或读写)一致性。这与IReliableReadWriteDocumentClient相同,因为它是DocumentClient的包装器。
注意:实现会话一致性的最简单方法是让一个DocumentClient实例自动为您管理它。您还可以更复杂地管理跨多个DocumentClient实例的逻辑会话。例如,假设您有一个负载平衡的Web API,其中有两个服务器,每个服务器都有一个DocumentClient实例,并且您希望这些服务器之间的会话一致性。
您可以通过将在步骤1中返回的x-ms-sessiontoken保存为客户端中的cookie,然后在读取请求中回显该x-ms-sessiontoken来实现此目的。通过对会话令牌进行往返,可以获得会话一致性。