This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

与后端状态存储交互

指导如何与特定的后端状态存储进行交互

请查看操作部分,了解支持的状态存储列表,并学习如何配置状态存储组件

1 - Azure Cosmos DB

使用 Azure Cosmos DB 作为状态存储

Dapr 在保存和检索状态时不对状态值进行转换。Dapr 要求所有状态存储实现遵循特定的键格式规范(参见状态管理规范)。您可以直接与底层存储交互以操作状态数据,例如:

  • 查询状态。
  • 创建聚合视图。
  • 进行备份。

连接到 Azure Cosmos DB

要连接到您的 Cosmos DB 实例,您可以:

按应用程序 ID 列出键

要获取与应用程序 “myapp” 关联的所有状态键,请使用查询:

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

上述查询返回所有 id 包含 “myapp||” 的文档,这是状态键的前缀。

获取特定状态数据

要通过键 “balance” 获取应用程序 “myapp” 的状态数据,请使用查询:

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

读取返回文档的 value 字段。要获取状态版本/ETag,请使用命令:

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

读取 actor 状态

要获取与实例 ID 为 “leroy” 的 actor 类型 “cat” 关联的所有状态键,该 actor 属于 ID 为 “mypets” 的应用程序,请使用命令:

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

要获取特定的 actor 状态,例如 “food”,请使用命令:

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

2 - Redis

使用 Redis 作为状态存储

Dapr 在保存和检索状态时不对状态值进行转换。Dapr 要求所有状态存储实现遵循特定的键格式规范(参见状态管理规范)。您可以直接与底层存储交互以操作状态数据,例如:

  • 查询状态。
  • 创建聚合视图。
  • 进行备份。

连接到 Redis

您可以使用官方的 redis-cli 或任何其他兼容 Redis 的工具连接到 Redis 状态存储以直接查询 Dapr 状态。如果您在容器中运行 Redis,最简单的使用 redis-cli 的方法是通过容器:

docker run --rm -it --link <Redis 容器的名称> redis redis-cli -h <Redis 容器的名称>

按应用 ID 列出键

要获取与应用程序 “myapp” 关联的所有状态键,请使用命令:

KEYS myapp*

上述命令返回现有键的列表,例如:

1) "myapp||balance"
2) "myapp||amount"

获取特定状态数据

Dapr 将状态值保存为哈希值。每个哈希值包含一个 “data” 字段,其中存储状态数据,以及一个 “version” 字段,作为 ETag,表示不断递增的版本。

例如,要通过键 “balance” 获取应用程序 “myapp” 的状态数据,请使用命令:

HGET myapp||balance data

要获取状态版本/ETag,请使用命令:

HGET myapp||balance version

读取 actor 状态

要获取与应用程序 ID 为 “mypets” 的 actor 类型 “cat” 的实例 ID 为 “leroy” 关联的所有状态键,请使用命令:

KEYS mypets||cat||leroy*

要获取特定的 actor 状态,例如 “food”,请使用命令:

HGET mypets||cat||leroy||food value

3 - SQL server

使用 SQL server 作为后端状态存储

Dapr 在保存和检索状态时不对状态值进行转换。Dapr 要求所有状态存储实现遵循特定的键格式(参见状态管理规范)。您可以直接与底层存储交互来操作状态数据,例如:

  • 查询状态。
  • 创建聚合视图。
  • 进行备份。

连接到 SQL Server

连接到 SQL Server 实例的最简单方法是使用:

按应用程序 ID 列出键

要获取与应用程序 “myapp” 关联的所有状态键,请使用以下查询:

SELECT * FROM states WHERE [Key] LIKE 'myapp||%'

上述查询返回所有 ID 包含 “myapp||” 的行,这是状态键的前缀。

获取特定状态数据

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

SELECT * FROM states WHERE [Key] = 'myapp||balance'

读取返回行的 Data 字段。要获取状态版本/ETag,请使用以下命令:

SELECT [RowVersion] FROM states WHERE [Key] = 'myapp||balance'

获取过滤的状态数据

要获取 JSON 数据中值 “color” 等于 “blue” 的所有状态数据,请使用以下查询:

SELECT * FROM states WHERE JSON_VALUE([Data], '$.color') = 'blue'

读取 actor 状态

要获取与 actor 类型 “cat” 的实例 ID “leroy” 关联的所有状态键,该 actor 属于 ID 为 “mypets” 的应用程序,请使用以下命令:

SELECT * FROM states WHERE [Key] LIKE 'mypets||cat||leroy||%'

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

SELECT * FROM states WHERE [Key] = 'mypets||cat||leroy||food'