教程:配置状态存储和pub/sub消息代理

配置Dapr的状态存储和pub/sub消息代理

要启动并运行状态和Pub/sub构建块,您需要两个组件:

  • 用于持久化和还原状态的状态存储组件
  • 作为pub/sub的消息代理组件,用于异步式的消息传递。

支持的组件的完整列表可以在这里找到:

在本教程中,我们将描述如何启动和运行 Redis。

第 1 步:创建 Redis 存储

Dapr 可以使用任何 Redis 实例:

  • 在本地开发计算机上容器化,或
  • 托管的云服务。

如果您已经有了 Redis 存储,请转到 配置 部分。

Redis is automatically installed in self-hosted environments by the Dapr CLI as part of the initialization process. 您已经准备就绪了! 跳到 下一步

You can use Helm to create a Redis instance in our Kubernetes cluster. 开始之前,安装 Helm v3

安装 Redis 到您的集群:

  1. helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm repo update
  3. helm install redis bitnami/redis --set image.tag=6.2

对于 Dapr 的发布/订阅功能,您至少需要 Redis 版本 5。 对于状态存储,您可以使用较低版本。 请注意,添加 --set architecture=standaloneinstall 命令创建一个单副本 Redis 设置,如果您在本地环境中工作,它可以节省内存和资源。

运行 kubectl get pods 命令来查看现在在你的集群中运行的Redis容器:

  1. $ kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. redis-master-0 1/1 Running 0 69s
  4. redis-replicas-0 1/1 Running 0 69s
  5. redis-replicas-1 1/1 Running 0 22s

对于 Kubernetes:

  • 主机名是 redis-master.default.svc.cluster.local:6379
  • 密钥 redis 是自动创建的。

Verify you have an Azure subscription.

  1. 打开并登录Azure 门户,开始创建 Azure Redis Cache 流程。
  2. 填写必要的信息.
    • Dapr发布/订阅使用由Redis 5.0引入的Redis streams。 要使用 Azure Redis Cache 进行发布/订阅,请将版本设置为 (PREVIEW) 6
  3. 点击创建,启动Redis实例的部署。
  4. 记下 Azure 门户中概述页面中的 Redis 实例主机名,以备后用。
    • 它应该看起来像xxxxxx.redis.cache.windows.net:6380
  5. 创建实例后,获取您的访问密钥:

    1. 导航到 设置 下的 访问密钥

    2. 创建一个 Kubernetes secret 来存储您的 Redis 密码:

      1. kubectl create secret generic redis --from-literal=redis-password=*********
  1. AWS Redis部署一个Redis实例。

  2. 记下 AWS 门户中的 Redis 主机名,以便以后使用。

  3. 创建一个 Kubernetes secret 来存储您的 Redis 密码:

    1. kubectl create secret generic redis --from-literal=redis-password=*********
  1. GCP云内存存储部署一个MemoryStore实例。

  2. 记下 GCP 门户中的 Redis 主机名,以便以后使用。

  3. 创建一个 Kubernetes secret 来存储您的 Redis 密码:

    1. kubectl create secret generic redis --from-literal=redis-password=*********

第 2 步:配置 Dapr 组件

Dapr 定义了用于使用组件构建块功能的资源。 这些步骤将介绍如何将上面创建的资源连接到 Dapr 以进行状态和发布/订阅。

找到您的组件文件

在自托管模式下,组件文件在以下位置自动创建:

  • Windows: %USERPROFILE%\.dapr\components\
  • Linux/MacOS: $HOME/.dapr/components

由于 Kubernetes 文件使用 kubectl 应用,因此可以在任何目录中创建它们。

创建状态存储组件

创建一个名为redis-state.yaml的文件,并粘贴以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. namespace: default
  6. spec:
  7. type: state.redis
  8. version: v1
  9. metadata:
  10. - name: redisHost
  11. value: localhost:6379
  12. - name: redisPassword
  13. secretKeyRef:
  14. name: redis
  15. key: redis-password
  16. # uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
  17. # - name: enableTLS
  18. # value: true
  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. namespace: default
  6. spec:
  7. type: state.redis
  8. version: v1
  9. metadata:
  10. - name: redisHost
  11. value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379>
  12. - name: redisPassword
  13. secretKeyRef:
  14. name: redis
  15. key: redis-password
  16. # uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
  17. # - name: enableTLS
  18. # value: true

请注意,上面的代码示例使用您之前在设置集群时创建的 Kubernetes 密钥。

其他存储

如果使用状态存储 Redis 以外的存储,请参考支持的状态存储 了解要设置的选项信息。

创建发布/订阅消息代理组件

创建一个名为 redis-pubsub.yaml 的文件,并粘贴以下内容:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: pubsub
  5. namespace: default
  6. spec:
  7. type: pubsub.redis
  8. version: v1
  9. metadata:
  10. - name: redisHost
  11. value: localhost:6379
  12. - name: redisPassword
  13. secretKeyRef:
  14. name: redis
  15. key: redis-password
  16. # uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
  17. # - name: enableTLS
  18. # value: true
  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: pubsub
  5. namespace: default
  6. spec:
  7. type: pubsub.redis
  8. version: v1
  9. metadata:
  10. - name: redisHost
  11. value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379>
  12. - name: redisPassword
  13. secretKeyRef:
  14. name: redis
  15. key: redis-password
  16. # uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
  17. # - name: enableTLS
  18. # value: true

请注意,上面的代码示例使用您之前在设置集群时创建的 Kubernetes 密钥。

其他存储

如果使用 Redis 以外的发布/订阅消息代理,请参考支持的发布/订阅消息代理 了解要设置的选项信息。

硬编码密码(不推荐)

仅用于开发目的,你可以跳过创建 Kubernetes 密钥,直接将密码放入 Dapr 组件文件中:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: statestore
  5. namespace: default
  6. spec:
  7. type: state.redis
  8. version: v1
  9. metadata:
  10. - name: redisHost
  11. value: <HOST>
  12. - name: redisPassword
  13. value: <PASSWORD>
  14. # uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
  15. # - name: enableTLS
  16. # value: true
  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: pubsub
  5. namespace: default
  6. spec:
  7. type: pubsub.redis
  8. version: v1
  9. metadata:
  10. - name: redisHost
  11. value: <HOST>
  12. - name: redisPassword
  13. value: <PASSWORD>
  14. # uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
  15. # - name: enableTLS
  16. # value: true

第 3 步:应用配置

当你运行dapr init时,Dapr会在你的本地机器上创建一个默认的Redispubsub.yaml。 通过打开您的组件目录进行验证:

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

对于新的组件文件:

  1. 在您的应用文件夹中创建一个新的 components 目录,其中包含 YAML 文件。
  2. 使用标志 --resources-path 提供 dapr run 命令的路径

如果你在无 Docker 的 Slim 模式下初始化了 Dapr,你需要手动创建默认目录,或者始终使用 --resources-path 指定一个组件目录。

运行 kubectl apply -f <FILENAME> 同时适用于状态文件和发布订阅文件:

  1. kubectl apply -f redis-state.yaml
  2. kubectl apply -f redis-pubsub.yaml

下一步

尝试 Dapr 快速入门