快速入门:状态管理

开始使用 Dapr 的状态管理模块

本文将介绍 Dapr 的状态管理模块。在本快速入门指南中,您将学习如何使用 Redis 状态存储来保存、获取和删除状态。您可以选择以下两种方式之一:

虽然本示例使用了 Redis,您也可以替换为其他支持的状态存储

使用多应用运行

在开始之前,请选择您偏好的编程语言对应的 Dapr SDK。


先决条件

您需要准备以下环境:

步骤 1:设置环境

克隆快速入门仓库中的示例

git clone https://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/python/sdk/order-processor

安装依赖项:

pip3 install -r requirements.txt 

使用 多应用运行在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run -f .

注意:在 Windows 系统中,由于未定义 Python3.exe,您可能需要在运行 dapr run -f . 之前将 dapr.yaml 文件中的 python3 修改为 python

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/javascript/sdk/order-processor

安装依赖项:

npm install

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run -f .

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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 8 和 .NET 9 将在 Dapr v1.16 及更高版本中得到支持。

步骤 1:设置环境

克隆快速入门仓库中的示例

git clone https://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/csharp/sdk/order-processor

安装依赖项:

dotnet restore
dotnet build

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run -f .

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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 实例的连接。

先决条件

您需要准备以下环境:

步骤 1:设置环境

克隆快速入门仓库中的示例

git clone https://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/java/sdk/order-processor

安装依赖项:

mvn clean install

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run -f .

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/go/sdk/order-processor

安装依赖项:

go build .

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run -f .

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

  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://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/python/sdk/order-processor

安装依赖项:

pip3 install -r requirements.txt

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run --app-id order-processor --resources-path ../../../resources/ -- python3 app.py

注意:在 Windows 系统中,由于未定义 Python3.exe,您可能需要使用 python app.py 而不是 python3 app.py

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/javascript/sdk/order-processor

安装依赖项,其中将包括 JavaScript SDK 的 @dapr/dapr 包:

npm install

验证服务目录中包含以下文件:

  • package.json
  • package-lock.json

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run --app-id order-processor --resources-path ../../../resources/ -- npm run start

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/csharp/sdk/order-processor

回忆 NuGet 包:

dotnet restore
dotnet build

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run --app-id order-processor --resources-path ../../../resources/ -- dotnet run

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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 实例的连接。

先决条件

您需要准备以下环境:

步骤 1:设置环境

克隆快速入门仓库中的示例

git clone https://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/java/sdk/order-processor

安装依赖项:

mvn clean install

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run --app-id order-processor --resources-path ../../../resources -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

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://github.com/dapr/quickstarts.git

步骤 2:操作服务状态

在终端中,进入 order-processor 目录。

cd state_management/go/sdk/order-processor

安装依赖项并构建应用程序:

go build .

在 Dapr sidecar 旁边启动 order-processor 服务。

dapr run --app-id order-processor --resources-path ../../../resources -- go run .

order-processor 服务会将 orderId 键/值对写入、读取并删除到statestore.yaml 组件中定义的 statestore 实例中。服务启动后,会自动执行一个循环。

  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 频道进行讨论。

下一步

探索 Dapr 教程 >>