Azure Cosmos DB

关于 Azure CosmosDB 状态存储组件的详细信息

配置

要设置 Azure CosmosDb 状态存储,请创建一个类型为 state.azure.cosmosdb 的组件。 请参阅本指南,了解如何创建和应用状态存储配置。

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: <NAME>
  5. namespace: <NAMESPACE>
  6. spec:
  7. type: state.azure.cosmosdb
  8. version: v1
  9. metadata:
  10. - name: url
  11. value: <REPLACE-WITH-URL>
  12. - name: masterKey
  13. value: <REPLACE-WITH-MASTER-KEY>
  14. - name: database
  15. value: <REPLACE-WITH-DATABASE>
  16. - name: collection
  17. value: <REPLACE-WITH-COLLECTION>

Warning

以上示例将密钥明文存储, It is recommended to use a secret store for the secrets as described here.

如果您想要使用 CosmosDb 作为 Actor 存储,请在 yaml 上附上以下内容。

  1. - name: actorStateStore
  2. value: "true"

元数据字段规范

字段必填详情Example
urlYCosmosDB 地址https://******.documents.azure.com:443/.
masterKeyY认证到CosmosDB 账户的密钥“key”
databaseY数据库名称“db”
collectionY要使用的集合名称“collection”
actorStateStoreN是否将此状态存储给 Actor 使用。 默认值为 “false”“true”, “false”

安装Azure Cosmos DB

请遵循 Azure 文档中关于如何创建 Azure CosmosDB 帐户的说明。 在为Dapr所使用之前,必须先在CosmosDB中创建数据库和集合。

注意:集合的分区键必须命名为”/partitionKey”。 注意:这是区分大小写的。

为了配置CosmosDB作为状态存储,你需要以下属性:

日期格式

要使用CosmosDB状态存储,你的数据必须以JSON序列化的方式发送到Dapr。 让它仅仅是JSON 可序列化 是不行的。

如果您使用的是Dapr SDKs (例如https://github.com/dapr/dotnet-sdk),SDK会将您的数据序列化为json。

例子请看分区键部分的 curl 操作。

分区键

对于non-actor状态操作,Azure Cosmos DB状态存储将使用向Dapr API发出的请求中提供的key属性来确定Cosmos DB分区键。 这可以通过在请求中指定一个元数据字段来覆盖,该字段的键为partitionKey,值为所需的分区。

以下操作将使用nihilus作为发送到CosmosDB的分区键值:

  1. curl -X POST http://localhost:3500/v1.0/state/<store_name> \
  2. -H "Content-Type: application/json"
  3. -d '[
  4. {
  5. "key": "nihilus",
  6. "value": "darth"
  7. }
  8. ]'

对于non-actor状态操作,如果你想控制CosmosDB分区,你可以在元数据中指定它。 重用上面的例子,下面是如何把它放在mypartition分区下的方法:

  1. curl -X POST http://localhost:3500/v1.0/state/<store_name> \
  2. -H "Content-Type: application/json"
  3. -d '[
  4. {
  5. "key": "nihilus",
  6. "value": "darth",
  7. "metadata": {
  8. "partitionKey": "mypartition"
  9. }
  10. }
  11. ]'

对于actor状态的操作,Dapr使用appId、actor类型和actor id生成分区键,这样同一个actor的数据最终总是在同一个分区下(你不需要指定它)。 这是因为actor状态操作必须使用事务,而在CosmosDB中,事务中的项必须在同一个分区上。

相关链接