快速入门:状态管理

开始使用Dapr的状态管理构建块

让我们看看Dapr的状态管理构建块。 在这个快速入门中,您将使用Redis状态存储来保存、获取和删除状态,方法有两种:

状态管理 - 图1

虽然此示例使用Redis,但您可以将其换成任何一个支持的状态存储

使用多应用程序运行

在继续快速入门之前,请选择您首选的特定语言 Dapr SDK。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/python/sdk/order-processor

安装依赖项:

  1. pip3 install -r requirements.txt

使用 Multi-App Run 在Dapr sidecar旁边运行order-processor服务。

  1. dapr run -f .

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

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. with DaprClient() as client:
  2. # Save state into the state store
  3. client.save_state(DAPR_STORE_NAME, orderId, str(order))
  4. logging.info('Saving Order: %s', order)
  5. # Get state from the state store
  6. result = client.get_state(DAPR_STORE_NAME, orderId)
  7. logging.info('Result after get: ' + str(result.data))
  8. # Delete state from the state store
  9. client.delete_state(store_name=DAPR_STORE_NAME, key=orderId)
  10. logging.info('Deleting Order: %s', order)

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == INFO:root:Saving Order: {'orderId': '1'}
  2. == APP == INFO:root:Result after get: b"{'orderId': '1'}"
  3. == APP == INFO:root:Deleting Order: {'orderId': '1'}
  4. == APP == INFO:root:Saving Order: {'orderId': '2'}
  5. == APP == INFO:root:Result after get: b"{'orderId': '2'}"
  6. == APP == INFO:root:Deleting Order: {'orderId': '2'}
  7. == APP == INFO:root:Saving Order: {'orderId': '3'}
  8. == APP == INFO:root:Result after get: b"{'orderId': '3'}"
  9. == APP == INFO:root:Deleting Order: {'orderId': '3'}
  10. == APP == INFO:root:Saving Order: {'orderId': '4'}
  11. == APP == INFO:root:Result after get: b"{'orderId': '4'}"
  12. == APP == INFO:root:Deleting Order: {'orderId': '4'}
dapr.yaml 多应用运行模板文件

当您运行 dapr init时,Dapr会创建一个默认的多应用运行模板文件,文件名为dapr.yaml。 使用 dapr run -f 启动项目中的所有应用程序。 在这个示例中,dapr.yaml文件包含以下内容:

  1. version: 1
  2. common:
  3. resourcesPath: ../../resources/
  4. apps:
  5. - appID: order-processor
  6. appDirPath: ./order-processor/
  7. 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组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

安装 order-processor 应用的依赖项:

  1. cd ./order-processor
  2. npm install
  3. cd ..

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/javascript/sdk/order-processor

安装依赖项:

  1. npm install

与 Dapr sidecar 一起运行 order-processor 服务。

  1. dapr run -f .

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. const client = new DaprClient()
  2. // Save state into a state store
  3. await client.state.save(DAPR_STATE_STORE_NAME, order)
  4. console.log("Saving Order: ", order)
  5. // Get state from a state store
  6. const savedOrder = await client.state.get(DAPR_STATE_STORE_NAME, order.orderId)
  7. console.log("Getting Order: ", savedOrder)
  8. // Delete state from the state store
  9. await client.state.delete(DAPR_STATE_STORE_NAME, order.orderId)
  10. console.log("Deleting Order: ", order)

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == > order-processor@1.0.0 start
  2. == APP == > node index.js
  3. == APP == Saving Order: { orderId: 1 }
  4. == APP == Saving Order: { orderId: 2 }
  5. == APP == Saving Order: { orderId: 3 }
  6. == APP == Saving Order: { orderId: 4 }
  7. == APP == Saving Order: { orderId: 5 }
  8. == APP == Getting Order: { orderId: 1 }
  9. == APP == Deleting Order: { orderId: 1 }
  10. == APP == Getting Order: { orderId: 2 }
  11. == APP == Deleting Order: { orderId: 2 }
  12. == APP == Getting Order: { orderId: 3 }
  13. == APP == Deleting Order: { orderId: 3 }
  14. == APP == Getting Order: { orderId: 4 }
  15. == APP == Deleting Order: { orderId: 4 }
  16. == APP == Getting Order: { orderId: 5 }
  17. == APP == Deleting Order: { orderId: 5 }
dapr.yaml 多应用运行模板文件

当您运行 dapr init时,Dapr会创建一个名为 dapr.yaml的默认多应用运行模板文件。 使用 dapr run -f 启动项目中的所有应用程序。 在这个示例中,dapr.yaml文件包含以下内容:

  1. version: 1
  2. common:
  3. resourcesPath: ../../resources/
  4. apps:
  5. - appID: order-processor
  6. appDirPath: ./order-processor/
  7. command: ["npm", "run", "start"]
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/csharp/sdk/order-processor

安装依赖项:

  1. dotnet restore
  2. dotnet build

与 Dapr sidecar 一起运行 order-processor 服务。

  1. dapr run -f .

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. var client = new DaprClientBuilder().Build();
  2. // Save state into the state store
  3. await client.SaveStateAsync(DAPR_STORE_NAME, orderId.ToString(), order.ToString());
  4. Console.WriteLine("Saving Order: " + order);
  5. // Get state from the state store
  6. var result = await client.GetStateAsync<string>(DAPR_STORE_NAME, orderId.ToString());
  7. Console.WriteLine("Getting Order: " + result);
  8. // Delete state from the state store
  9. await client.DeleteStateAsync(DAPR_STORE_NAME, orderId.ToString());
  10. Console.WriteLine("Deleting Order: " + order);

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == Saving Order: Order { orderId = 1 }
  2. == APP == Getting Order: Order { orderId = 1 }
  3. == APP == Deleting Order: Order { orderId = 1 }
  4. == APP == Saving Order: Order { orderId = 2 }
  5. == APP == Getting Order: Order { orderId = 2 }
  6. == APP == Deleting Order: Order { orderId = 2 }
  7. == APP == Saving Order: Order { orderId = 3 }
  8. == APP == Getting Order: Order { orderId = 3 }
  9. == APP == Deleting Order: Order { orderId = 3 }
  10. == APP == Saving Order: Order { orderId = 4 }
  11. == APP == Getting Order: Order { orderId = 4 }
  12. == APP == Deleting Order: Order { orderId = 4 }
  13. == APP == Saving Order: Order { orderId = 5 }
  14. == APP == Getting Order: Order { orderId = 5 }
  15. == APP == Deleting Order: Order { orderId = 5 }
dapr.yaml 多应用运行模板文件

当您运行 dapr init时,Dapr会创建一个名为 dapr.yaml的默认多应用运行模板文件。 使用 dapr run -f 启动项目中的所有应用程序。 在这个示例中,dapr.yaml文件包含以下内容:

  1. version: 1
  2. common:
  3. resourcesPath: ../../../resources/
  4. apps:
  5. - appID: order-processor
  6. appDirPath: ./order-processor/
  7. command: ["dotnet", "run"]
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/java/sdk/order-processor

安装依赖项:

  1. mvn clean install

与 Dapr sidecar 一起运行 order-processor 服务。

  1. dapr run -f .

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. try (DaprClient client = new DaprClientBuilder().build()) {
  2. for (int i = 1; i <= 10; i++) {
  3. int orderId = i;
  4. Order order = new Order();
  5. order.setOrderId(orderId);
  6. // Save state into the state store
  7. client.saveState(DAPR_STATE_STORE, String.valueOf(orderId), order).block();
  8. LOGGER.info("Saving Order: " + order.getOrderId());
  9. // Get state from the state store
  10. State<Order> response = client.getState(DAPR_STATE_STORE, String.valueOf(orderId), Order.class).block();
  11. LOGGER.info("Getting Order: " + response.getValue().getOrderId());
  12. // Delete state from the state store
  13. client.deleteState(DAPR_STATE_STORE, String.valueOf(orderId)).block();
  14. LOGGER.info("Deleting Order: " + orderId);
  15. TimeUnit.MILLISECONDS.sleep(1000);
  16. }

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == INFO:root:Saving Order: {'orderId': '1'}
  2. == APP == INFO:root:Result after get: b"{'orderId': '1'}"
  3. == APP == INFO:root:Deleting Order: {'orderId': '1'}
  4. == APP == INFO:root:Saving Order: {'orderId': '2'}
  5. == APP == INFO:root:Result after get: b"{'orderId': '2'}"
  6. == APP == INFO:root:Deleting Order: {'orderId': '2'}
  7. == APP == INFO:root:Saving Order: {'orderId': '3'}
  8. == APP == INFO:root:Result after get: b"{'orderId': '3'}"
  9. == APP == INFO:root:Deleting Order: {'orderId': '3'}
  10. == APP == INFO:root:Saving Order: {'orderId': '4'}
  11. == APP == INFO:root:Result after get: b"{'orderId': '4'}"
  12. == APP == INFO:root:Deleting Order: {'orderId': '4'}
dapr.yaml 多应用运行模板文件

当您运行 dapr init时,Dapr会创建一个名为 dapr.yaml的默认多应用运行模板文件。 使用 dapr run -f 启动项目中的所有应用程序。 在这个示例中,dapr.yaml文件包含以下内容:

  1. version: 1
  2. common:
  3. resourcesPath: ../../resources/
  4. apps:
  5. - appID: order-processor
  6. appDirPath: ./order-processor/
  7. command: ["java", "-jar", "target/OrderProcessingService-0.0.1-SNAPSHOT.jar"]
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/go/sdk/order-processor

安装依赖项:

  1. go build .

与 Dapr sidecar 一起运行 order-processor 服务。

  1. dapr run -f .

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. client, err := dapr.NewClient()
  2. // Save state into the state store
  3. _ = client.SaveState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId), []byte(order))
  4. log.Print("Saving Order: " + string(order))
  5. // Get state from the state store
  6. result, _ := client.GetState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
  7. fmt.Println("Getting Order: " + string(result.Value))
  8. // Delete state from the state store
  9. _ = client.DeleteState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
  10. log.Print("Deleting Order: " + string(order))

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == dapr client initializing for: 127.0.0.1:53689
  2. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":1}
  3. == APP == Getting Order: {"orderId":1}
  4. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":1}
  5. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":2}
  6. == APP == Getting Order: {"orderId":2}
  7. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":2}
  8. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":3}
  9. == APP == Getting Order: {"orderId":3}
  10. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":3}
  11. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":4}
  12. == APP == Getting Order: {"orderId":4}
  13. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":4}
  14. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":5}
  15. == APP == Getting Order: {"orderId":5}
  16. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":5}
dapr.yaml 多应用运行模板文件

当您运行 dapr init时,Dapr会创建一个名为 dapr.yaml的默认多应用运行模板文件。 使用 dapr run -f 启动项目中的所有应用程序。 在这个示例中,dapr.yaml文件包含以下内容:

  1. version: 1
  2. common:
  3. resourcesPath: ../../resources/
  4. apps:
  5. - appID: order-processor
  6. appDirPath: ./order-processor/
  7. command: ["go", "run", "."]
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

一次只运行一个应用程序

在继续快速入门之前,请选择您首选的特定语言 Dapr SDK。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/python/sdk/order-processor

安装依赖项:

  1. pip3 install -r requirements.txt

与 Dapr sidecar 一起运行 order-processor 服务。

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

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

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. with DaprClient() as client:
  2. # Save state into the state store
  3. client.save_state(DAPR_STORE_NAME, orderId, str(order))
  4. logging.info('Saving Order: %s', order)
  5. # Get state from the state store
  6. result = client.get_state(DAPR_STORE_NAME, orderId)
  7. logging.info('Result after get: ' + str(result.data))
  8. # Delete state from the state store
  9. client.delete_state(store_name=DAPR_STORE_NAME, key=orderId)
  10. logging.info('Deleting Order: %s', order)

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == INFO:root:Saving Order: {'orderId': '1'}
  2. == APP == INFO:root:Result after get: b"{'orderId': '1'}"
  3. == APP == INFO:root:Deleting Order: {'orderId': '1'}
  4. == APP == INFO:root:Saving Order: {'orderId': '2'}
  5. == APP == INFO:root:Result after get: b"{'orderId': '2'}"
  6. == APP == INFO:root:Deleting Order: {'orderId': '2'}
  7. == APP == INFO:root:Saving Order: {'orderId': '3'}
  8. == APP == INFO:root:Result after get: b"{'orderId': '3'}"
  9. == APP == INFO:root:Deleting Order: {'orderId': '3'}
  10. == APP == INFO:root:Saving Order: {'orderId': '4'}
  11. == APP == INFO:root:Result after get: b"{'orderId': '4'}"
  12. == APP == INFO:root:Deleting Order: {'orderId': '4'}
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/javascript/sdk/order-processor

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

  1. npm install

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

  • package.json
  • package-lock.json

与 Dapr sidecar 一起运行 order-processor 服务。

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

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. const client = new DaprClient()
  2. // Save state into a state store
  3. await client.state.save(DAPR_STATE_STORE_NAME, order)
  4. console.log("Saving Order: ", order)
  5. // Get state from a state store
  6. const savedOrder = await client.state.get(DAPR_STATE_STORE_NAME, order.orderId)
  7. console.log("Getting Order: ", savedOrder)
  8. // Delete state from the state store
  9. await client.state.delete(DAPR_STATE_STORE_NAME, order.orderId)
  10. console.log("Deleting Order: ", order)

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == > order-processor@1.0.0 start
  2. == APP == > node index.js
  3. == APP == Saving Order: { orderId: 1 }
  4. == APP == Saving Order: { orderId: 2 }
  5. == APP == Saving Order: { orderId: 3 }
  6. == APP == Saving Order: { orderId: 4 }
  7. == APP == Saving Order: { orderId: 5 }
  8. == APP == Getting Order: { orderId: 1 }
  9. == APP == Deleting Order: { orderId: 1 }
  10. == APP == Getting Order: { orderId: 2 }
  11. == APP == Deleting Order: { orderId: 2 }
  12. == APP == Getting Order: { orderId: 3 }
  13. == APP == Deleting Order: { orderId: 3 }
  14. == APP == Getting Order: { orderId: 4 }
  15. == APP == Deleting Order: { orderId: 4 }
  16. == APP == Getting Order: { orderId: 5 }
  17. == APP == Deleting Order: { orderId: 5 }
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/csharp/sdk/order-processor

还原 NuGet 包:

  1. dotnet restore
  2. dotnet build

与 Dapr sidecar 一起运行 order-processor 服务。

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

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. var client = new DaprClientBuilder().Build();
  2. // Save state into the state store
  3. await client.SaveStateAsync(DAPR_STORE_NAME, orderId.ToString(), order.ToString());
  4. Console.WriteLine("Saving Order: " + order);
  5. // Get state from the state store
  6. var result = await client.GetStateAsync<string>(DAPR_STORE_NAME, orderId.ToString());
  7. Console.WriteLine("Getting Order: " + result);
  8. // Delete state from the state store
  9. await client.DeleteStateAsync(DAPR_STORE_NAME, orderId.ToString());
  10. Console.WriteLine("Deleting Order: " + order);

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == Saving Order: Order { orderId = 1 }
  2. == APP == Getting Order: Order { orderId = 1 }
  3. == APP == Deleting Order: Order { orderId = 1 }
  4. == APP == Saving Order: Order { orderId = 2 }
  5. == APP == Getting Order: Order { orderId = 2 }
  6. == APP == Deleting Order: Order { orderId = 2 }
  7. == APP == Saving Order: Order { orderId = 3 }
  8. == APP == Getting Order: Order { orderId = 3 }
  9. == APP == Deleting Order: Order { orderId = 3 }
  10. == APP == Saving Order: Order { orderId = 4 }
  11. == APP == Getting Order: Order { orderId = 4 }
  12. == APP == Deleting Order: Order { orderId = 4 }
  13. == APP == Saving Order: Order { orderId = 5 }
  14. == APP == Getting Order: Order { orderId = 5 }
  15. == APP == Deleting Order: Order { orderId = 5 }
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/java/sdk/order-processor

安装依赖项:

  1. mvn clean install

与 Dapr sidecar 一起运行 order-processor 服务。

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

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. try (DaprClient client = new DaprClientBuilder().build()) {
  2. for (int i = 1; i <= 10; i++) {
  3. int orderId = i;
  4. Order order = new Order();
  5. order.setOrderId(orderId);
  6. // Save state into the state store
  7. client.saveState(DAPR_STATE_STORE, String.valueOf(orderId), order).block();
  8. LOGGER.info("Saving Order: " + order.getOrderId());
  9. // Get state from the state store
  10. State<Order> response = client.getState(DAPR_STATE_STORE, String.valueOf(orderId), Order.class).block();
  11. LOGGER.info("Getting Order: " + response.getValue().getOrderId());
  12. // Delete state from the state store
  13. client.deleteState(DAPR_STATE_STORE, String.valueOf(orderId)).block();
  14. LOGGER.info("Deleting Order: " + orderId);
  15. TimeUnit.MILLISECONDS.sleep(1000);
  16. }

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == INFO:root:Saving Order: {'orderId': '1'}
  2. == APP == INFO:root:Result after get: b"{'orderId': '1'}"
  3. == APP == INFO:root:Deleting Order: {'orderId': '1'}
  4. == APP == INFO:root:Saving Order: {'orderId': '2'}
  5. == APP == INFO:root:Result after get: b"{'orderId': '2'}"
  6. == APP == INFO:root:Deleting Order: {'orderId': '2'}
  7. == APP == INFO:root:Saving Order: {'orderId': '3'}
  8. == APP == INFO:root:Result after get: b"{'orderId': '3'}"
  9. == APP == INFO:root:Deleting Order: {'orderId': '3'}
  10. == APP == INFO:root:Saving Order: {'orderId': '4'}
  11. == APP == INFO:root:Result after get: b"{'orderId': '4'}"
  12. == APP == INFO:root:Deleting Order: {'orderId': '4'}
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

先决条件

对于此示例,您将需要:

第1步:设置环境

克隆在Quickstarts存储库中提供的示例

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

第2步:操作服务状态

在一个终端窗口中,导航到 order-processor 目录。

  1. cd state_management/go/sdk/order-processor

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

  1. go build .

与 Dapr sidecar 一起运行 order-processor 服务。

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

‘order-processor’ 服务将“orderId”键/值对写入、读取和删除到“statestore”实例 在“statestore.yaml” 组件中定义。 一旦服务启动,它就会执行循环。

  1. client, err := dapr.NewClient()
  2. // Save state into the state store
  3. _ = client.SaveState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId), []byte(order))
  4. log.Print("Saving Order: " + string(order))
  5. // Get state from the state store
  6. result, _ := client.GetState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
  7. fmt.Println("Getting Order: " + string(result.Value))
  8. // Delete state from the state store
  9. _ = client.DeleteState(ctx, STATE_STORE_NAME, strconv.Itoa(orderId))
  10. log.Print("Deleting Order: " + string(order))

第3步:查看order-processor输出

请注意,正如上面代码中所指定的,代码将应用程序状态保存在 Dapr 状态存储中,读取它,然后将其删除。

Order-processor输出:

  1. == APP == dapr client initializing for: 127.0.0.1:53689
  2. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":1}
  3. == APP == Getting Order: {"orderId":1}
  4. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":1}
  5. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":2}
  6. == APP == Getting Order: {"orderId":2}
  7. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":2}
  8. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":3}
  9. == APP == Getting Order: {"orderId":3}
  10. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":3}
  11. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":4}
  12. == APP == Getting Order: {"orderId":4}
  13. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":4}
  14. == APP == 2022/04/01 09:16:03 Saving Order: {"orderId":5}
  15. == APP == Getting Order: {"orderId":5}
  16. == APP == 2022/04/01 09:16:03 Deleting Order: {"orderId":5}
statestore.yaml 组件文件

当你运行dapr init时,Dapr会创建一个默认的Redisstatestore.yaml并在你的本地机器上运行一个Redis容器,它位于:

  • 在Windows上,在 %UserProfile%\.dapr\components\statestore.yaml
  • 在Linux/MacOS上,在~/.dapr/components/statestore.yaml

通过statestore.yaml组件,您可以在不进行代码更改的情况下轻松替换state store

本快速入门包含的 Redis statestore.yaml 文件包含以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. spec:
  6. type: state.redis
  7. version: v1
  8. metadata:
  9. - name: redisHost
  10. value: localhost:6379
  11. - name: redisPassword
  12. value: ""
  13. - name: actorStateStore
  14. value: "true"

在 YAML 文件中:

  • metadata/name是您的应用程序与组件通信的方式(在代码示例中称为DAPR_STORE_NAME)。
  • spec/metadata定义了组件使用的Redis实例的连接。

告诉我们您的想法

我们一直在努力改进我们的快速入门示例,并重视您的反馈。 您觉得此快速入门有帮助吗? 您有改进的建议吗?

加入我们的discord频道参与讨论。

下一步

探索 Dapr 教程 >>