如何操作:配置 状态存储 和 发布/订阅 消息代理

配置Dapr的状态存储和 发布/订阅 消息代理

为了启动和运行状态和 发布/订阅 构建块,需要两个组件。

  1. 一个用于持久化和恢复的状态存储组件。
  2. 作为发布/订阅消息代理组件,用于异步式的消息传递。

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

此页的其余部分描述了如何使用Redis启动和运行。

Self-hosted mode

当在自托管模式下初始化时,Dapr会自动运行一个Redis容器并设置所需的 yaml 文件. 您可以跳过此页并跳转到 下一步 您可以跳过此页并跳转到 下一步

创建Redis存储

Dapr可以使用任何Redis实例–无论是在本地开发机器上的容器化的还是在托管云服务上的。 如果您已经有了Redis存储,请转到 配置 部分。

作为初始化过程的一部分,Dapr CLI 会自动在自托管环境中安装 Redis。 您都已设置完毕,可以跳转到[下一步](下一步)

您可以使用 helm 在我们的 Kubernetes 集群中快速创建 dapr 实例。 此方法需要 安装 Helm v3

  1. 安装 Redis 到您的集群:

    1. helm repo add bitnami https://charts.bitnami.com/bitnami
    2. helm repo update
    3. helm install redis bitnami/redis

    请注意,您将需要 Redis 版本大于 5, 这是Dapr 的 发布/订阅 功能所要求的。 如果你打算将Redis仅仅作为一个状态存储(而不是用于 发布/订阅),可以使用一个低版本。

  2. 运行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-slave-0 1/1 Running 0 69s
    5. redis-slave-1 1/1 Running 0 22s

请注意,主机名是 redis-master.default.svc.cluster.local:6379,Kubernetes 密钥 redis是自动创建的。

此方法需要 Azure 订阅。

  1. 打开 Azure Portal 来启动 Azure Redis Cache 创建流程。 如有必要,请登录。
  2. 填写必要的信息
    • Dapr 发布/订阅 使用 Redis streams ,这是由Redis 5.0引入的。 如果您想使用 Azure Redis Cache 来处理 发布/订阅,请确保将版本设置为 (PREVIEW) 6。
  3. 点击“创建”来启动您的 Redis 实例的部署。
  4. 你需要Redis实例的主机名,你可以从Azure中的 “概述 “中检索。 它看起来像 xxxxxx.redis.cache.windows.net:6380。 注意这一点,以备后用。
  5. 创建实例后,您需要获取访问密钥。 在“设置”下导航到”访问密钥”并创建一个Kubernetes密钥来存储您的 Redis 密码:

    1. kubectl create secret generic redis --from-literal=redis-password=*********
  1. 访问 AWS Redis 来部署一个 Redis 实例
  2. 注意AWS门户中的Redis主机名,以便以后使用。
  3. 创建一个Kubernetes密钥来存储您的 Redis 密码:

    1. kubectl create secret generic redis --from-literal=redis-password=*********
  1. 访问 GCP Cloud MemoryStore 来部署一个 MemoryStore 实例
  2. 注意GCP门户中的Redis主机名,以便以后使用。
  3. 创建一个Kubernetes密钥来存储您的 Redis 密码:

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

配置 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: <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

这个例子使用的是用上面的说明设置集群时创建的 kubernetes 密钥。

Other stores

If using a state store other than Redis, refer to the supported state stores for information on what options to set.

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

创建名为 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: <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

这个例子使用的是用上面的说明设置集群时创建的 kubernetes 密钥。

Other stores

If using a pub/sub message broker other than Redis, refer to the supported pub/sub message brokers for information on what options to set.

硬编码密码(不推荐)

仅用于开发目的,你可以跳过创建 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>
  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>

应用配置

默认情况下,当你运行 dapr init 时,CLI 创建一个本地的 Redis 实例。 但是,如果你想要配置一个不同的 Redis 实例你可以:

  • 更新现有的组件文件或在默认的组件目录下创建新的组件文件。
    • Linux/MacOS: $HOME/.dapr/components
    • Windows: %USERPROFILE%\.dapr\components
  • 在你的应用程序文件夹中创建一个新的components目录,其中包含YAML文件,并提供dapr run命令的路径,标志为--components-path

Self-hosted slim mode

  1. If you initialized Dapr in <a href="https://docs.dapr.io/zh-hans/operations/hosting/self-hosted/self-hosted-no-docker/">slim mode</a> (without Docker) you need to manually create the default directory, or always specify a components directory using <code>--components-path</code>.

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

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

下一步