Azure Cosmos DB

使用 azure Cosmos DB 作为后端状态存储

Dapr 在保存和检索状态时不会转换状态值。 Dapr 要求所有的状态存储实现都要遵守特定的密钥格式 (参见Dapr 状态管理规范)。 您可以直接与基础存储进行交互以操作状态数据,例如查询状态、创建聚合视图和进行备份。

注意: Azure Cosmos DB 是一个支持多种 API 的多模数据库。 默认的 Dapr Cosmos DB 状态存储实现使用 Azure Cosmos DB SQL API.

1. 连接到 Azure Cosmos DB

连接到您的 Cosmos DB 实例的最简单方法是使用 Azure Management Portal上的数据资源管理器。 或者,你也可以使用多种 SDK 和工具

注意: 下面的示例使用 Cosmos DB SQL API. 当你为 Dapr 配置 Azure Cosmos DB 时,你需要明确指定要使用的数据库和集合。 当你为 Dapr 配置 Azure Cosmos DB 时,你需要明确指定要使用的数据库和集合。 下面的示例假设你已经连接到了正确的数据库和一个名为 “states” 的集合。

2. 通过 App ID 列出键

执行下面的查询,以获得与应用程序 “myapp” 相关的所有状态键:

SELECT * FROM states WHERE CONTAINS(states.id, 'myapp||')

上面的查询会返回所有 id 包含 “myapp-” 的文档,也就是状态键的前缀。

3. 获取特定状态数据

执行下面的查询,以通过键 “balance” 获取应用程序 “myapp” 的状态数据:

SELECT * FROM states WHERE states.id = 'myapp||balance'

然后,读取返回的文档的 value 字段。

要获取状态 version/ETag ,请使用以下命令:

SELECT states._etag FROM states WHERE states.id = 'myapp||balance'

4. 获取 actor 状态

要获取应用ID为 “myets”,实例ID为 “leroy”,actor 类型为 “cat” 的相关联所有 actor 的状态键,请使用以下命令:

SELECT * FROM states WHERE CONTAINS(states.id, 'mypets||cat||leroy||')

要获取特定 actor 状态(如 “food”) ,请使用以下命令:

SELECT * FROM states WHERE states.id = 'mypets||cat||leroy||food'

警告: 您不应该手动更新或删除存储引擎中的状态。 所有的写入和删除操作都应该通过 Dapr 运行时来完成。