The documentation you are viewing is for Dapr v1.7 which is an older version of Dapr. For up-to-date documentation, see the latest version.

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

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

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

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

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

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

创建Redis存储

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


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


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

  1. 安装 Redis 到您的集群:

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

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

  2. 运行kubectl get pods来查看现在正在集群中运行的Redis容器。

    $ kubectl get pods
    NAME             READY   STATUS    RESTARTS   AGE
    redis-master-0   1/1     Running   0          69s
    redis-slave-0    1/1     Running   0          69s
    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 密码:
    kubectl create secret generic redis --from-literal=redis-password=*********
    

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

  1. 访问 GCP Cloud MemoryStore 来部署一个 MemoryStore 实例
  2. 注意GCP门户中的Redis主机名,以便以后使用。
  3. 创建一个Kubernetes密钥来存储您的 Redis 密码:
    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 的文件, 并粘贴以下内容:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: default
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379>
  - name: redisPassword
    secretKeyRef:
      name: redis
      key: redis-password

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

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

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

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: pubsub
  namespace: default
spec:
  type: pubsub.redis
  version: v1
  metadata:
  - name: redisHost
    value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379>
  - name: redisPassword
    secretKeyRef:
      name: redis
      key: redis-password

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

硬编码密码(不推荐)

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

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: default
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: <HOST>
  - name: redisPassword
    value: <PASSWORD>
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: pubsub
  namespace: default
spec:
  type: pubsub.redis
  version: v1
  metadata:
  - name: redisHost
    value: <HOST>
  - name: redisPassword
    value: <PASSWORD>

应用配置


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

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

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

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

下一步