Dapr 为开发者提供了不同的方式来共享应用程序之间的状态。
在共享状态时,不同的体系结构可能有不同的需求。 例如,在一个场景中,您可能想要封装某个应用程序中的所有状态,并让 Dapr 管理您的访问权限。 在不同的场景中,您可能需要两个在相同状态下工作的应用程序能够获得和保存相同的键值(keys)。
要启用状态共享, Dapr 支持以下键前缀策略:
Appid
- 这是默认策略。 带有appid
前缀的状态仅允许具有指定appid
的应用程序管理。 所有的状态键都会以appid
为前缀,并对应用进行限定。
name
- 此设置使用状态存储组件的名称作为前缀。 对于一个给定的状态存储,多个应用程序可以共享同一个状态。
none
- 此设置不使用前缀。 多个应用程序在不同的状态存储中共享状态。
要指定前缀策略,请在状态组件上添加一个名为keyPrefix
的元数据键:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
namespace: production
spec:
type: state.redis
version: v1
metadata:
- name: keyPrefix
value: <key-prefix-strategy>
下面的例子将向你展示上述支持的前缀策略下是如何进行状态检索的:
appid
(default)一个id为myApp
的Dapr应用程序正在将状态保存到一个名为redis
的状态存储中:
curl -X POST http://localhost:3500/v1.0/state/redis \
-H "Content-Type: application/json"
-d '[
{
"key": "darth",
"value": "nihilus"
}
]'
该键将被保存为myApp||darth
。
name
一个id为myApp
的Dapr应用程序正在将状态保存到一个名为redis
的状态存储中:
curl -X POST http://localhost:3500/v1.0/state/redis \
-H "Content-Type: application/json"
-d '[
{
"key": "darth",
"value": "nihilus"
}
]'
该键将被保存为redis||darth
。
none
一个id为myApp
的Dapr应用程序正在将状态保存到一个名为redis
的状态存储中:
curl -X POST http://localhost:3500/v1.0/state/redis \
-H "Content-Type: application/json"
-d '[
{
"key": "darth",
"value": "nihilus"
}
]'
该键将被保存为darth
。