要设置 Azure CosmosDb 状态存储,请创建一个类型为 state.azure.cosmosdb
的组件。 请参阅本指南,了解如何创建和应用状态存储配置。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
namespace: <NAMESPACE>
spec:
type: state.azure.cosmosdb
version: v1
metadata:
- name: url
value: <REPLACE-WITH-URL>
- name: masterKey
value: <REPLACE-WITH-MASTER-KEY>
- name: database
value: <REPLACE-WITH-DATABASE>
- name: collection
value: <REPLACE-WITH-COLLECTION>
如果您想要使用 CosmosDb 作为 Actor 存储,请在 yaml 上附上以下内容。
- name: actorStateStore
value: "true"
字段 | 必填 | 详情 | Example |
---|---|---|---|
url | Y | CosmosDB 地址 | "https://******.documents.azure.com:443/" . |
masterKey | Y | 认证到CosmosDB 账户的密钥 | "key" |
database | Y | 数据库名称 | "db" |
collection | Y | 要使用的集合名称 | "collection" |
actorStateStore | N | 是否将此状态存储给 Actor 使用。 默认值为 "false" | "true" , "false" |
请遵循 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的分区键值:
curl -X POST http://localhost:3500/v1.0/state/<store_name> \
-H "Content-Type: application/json"
-d '[
{
"key": "nihilus",
"value": "darth"
}
]'
对于non-actor状态操作,如果你想控制CosmosDB分区,你可以在元数据中指定它。 重用上面的例子,下面是如何把它放在mypartition
分区下的方法:
curl -X POST http://localhost:3500/v1.0/state/<store_name> \
-H "Content-Type: application/json"
-d '[
{
"key": "nihilus",
"value": "darth",
"metadata": {
"partitionKey": "mypartition"
}
}
]'
对于actor状态的操作,Dapr使用appId
、actor类型和actor id生成分区键,这样同一个actor的数据最终总是在同一个分区下(你不需要指定它)。 这是因为actor状态操作必须使用事务,而在CosmosDB中,事务中的项必须在同一个分区上。