教程:配置状态存储和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 到您的集群:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install redis bitnami/redis --set image.tag=6.2
对于 Dapr 的发布/订阅功能,您至少需要 Redis 版本 5。 对于状态存储,您可以使用较低版本。 请注意,添加 --set architecture=standalone
到 install
命令创建一个单副本 Redis 设置,如果您在本地环境中工作,它可以节省内存和资源。
运行 kubectl get pods
命令来查看现在在你的集群中运行的Redis容器:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-master-0 1/1 Running 0 69s
redis-replicas-0 1/1 Running 0 69s
redis-replicas-1 1/1 Running 0 22s
对于 Kubernetes:
- 主机名是
redis-master.default.svc.cluster.local:6379
- 密钥
redis
是自动创建的。
Verify you have an Azure subscription.
- 打开并登录Azure 门户,开始创建 Azure Redis Cache 流程。
- 填写必要的信息.
- Dapr发布/订阅使用由Redis 5.0引入的Redis streams。 要使用 Azure Redis Cache 进行发布/订阅,请将版本设置为 (PREVIEW) 6。
- 点击创建,启动Redis实例的部署。
- 记下 Azure 门户中概述页面中的 Redis 实例主机名,以备后用。
- 它应该看起来像
xxxxxx.redis.cache.windows.net:6380
。
- 它应该看起来像
创建实例后,获取您的访问密钥:
导航到 设置 下的 访问密钥。
创建一个 Kubernetes secret 来存储您的 Redis 密码:
kubectl create secret generic redis --from-literal=redis-password=*********
从AWS Redis部署一个Redis实例。
记下 AWS 门户中的 Redis 主机名,以便以后使用。
创建一个 Kubernetes secret 来存储您的 Redis 密码:
kubectl create secret generic redis --from-literal=redis-password=*********
从GCP云内存存储部署一个MemoryStore实例。
记下 GCP 门户中的 Redis 主机名,以便以后使用。
创建一个 Kubernetes secret 来存储您的 Redis 密码:
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
的文件,并粘贴以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
namespace: default
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
# uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
# - name: enableTLS
# value: true
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
# uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
# - name: enableTLS
# value: true
请注意,上面的代码示例使用您之前在设置集群时创建的 Kubernetes 密钥。
其他存储
如果使用状态存储 Redis 以外的存储,请参考支持的状态存储 了解要设置的选项信息。
创建发布/订阅消息代理组件
创建一个名为 redis-pubsub.yaml
的文件,并粘贴以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
namespace: default
spec:
type: pubsub.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
# uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
# - name: enableTLS
# value: true
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
# uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
# - name: enableTLS
# value: true
请注意,上面的代码示例使用您之前在设置集群时创建的 Kubernetes 密钥。
其他存储
如果使用 Redis 以外的发布/订阅消息代理,请参考支持的发布/订阅消息代理 了解要设置的选项信息。
硬编码密码(不推荐)
仅用于开发目的,你可以跳过创建 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>
# uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
# - name: enableTLS
# value: true
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>
# uncomment below for connecting to redis cache instances over TLS (ex - Azure Redis Cache)
# - name: enableTLS
# value: true
第 3 步:应用配置
当你运行dapr init
时,Dapr会在你的本地机器上创建一个默认的Redispubsub.yaml
。 通过打开您的组件目录进行验证:
- 在Windows上,在
%UserProfile%\.dapr\components\pubsub.yaml
- 在Linux/MacOS上,在
~/.dapr/components/pubsub.yaml
对于新的组件文件:
- 在您的应用文件夹中创建一个新的
components
目录,其中包含 YAML 文件。 - 使用标志
--resources-path
提供dapr run
命令的路径
如果你在无 Docker 的 Slim 模式下初始化了 Dapr,你需要手动创建默认目录,或者始终使用 --resources-path
指定一个组件目录。
运行 kubectl apply -f <FILENAME>
同时适用于状态文件和发布订阅文件:
kubectl apply -f redis-state.yaml
kubectl apply -f redis-pubsub.yaml