我试图了解通过 .NET 客户端 SDK 使用 Azure DocumentDb 时 session 一致性的实际含义,即定义(和限制) session 的内容。每次我们创建 DocumentClient
的新实例时是否都会创建一个新 session ,如果是这样,如果我们使用 IReliableReadWriteDocumentClient
包装器,行为会发生变化吗?
最佳答案
是的,每次创建 DocumentClient 类的新实例时都会创建一个新 session 。每个 DocumentClient 实例维护一个集合映射 -> session token 映射。客户端保存从服务器收到的最新 session token ,并在读取请求期间将其作为 header (x-ms-sessiontoken) 回显。这使 DocumentDB 能够定位您的集合的最新副本,以提供 session (或读写)一致性。这与 IReliableReadWriteDocumentClient 相同,因为它是 DocumentClient 的包装器。
注意: 实现 session 一致性的最简单方法是让单个 DocumentClient 实例自动为您管理它。您还可以管理跨多个 DocumentClient 实例的逻辑 session ,但稍微复杂一些。例如,假设您有一个负载平衡的 Web API,其中有两个服务器,每个服务器都有一个 DocumentClient 实例,并且您希望这些服务器之间的 session 保持一致。
您可以通过将步骤 1 中返回的 x-ms-sessiontoken 保存为客户端中的 cookie,然后在读取请求中回显该 x-ms-sessiontoken 来实现此目的。通过往返 session token ,您可以获得 session 一致性。
关于azure-cosmosdb - session 一致性和 .NET 客户端 SDK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36877491/