Dapr(分布式应用程序运行时)介绍
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。
Dapr 官网:https://dapr.io/
实战 Dapr 的 Redis 发布/订阅应用
1. 创建项目
首先,我们将创建我们的项目根文件夹来托管我们将在后续步骤中创建的所有服务。
mkdir dapr-nestjs-redis-pub-sub
2. 创建 Dapr Placement 服务
由于我们将创建多个服务,我们将使用 docker-compose 来运行这些服务。
让我们在项目的根文件夹中创建 docker-compose.yml 文件
cd dapr-nestjs-redis-pub-sub touch docker-compose.yml
version: "3.5" services: dapr-placement: image: "daprio/dapr" command: ["./placement", "-port", "50006"]
Dapr placement 服务将负责管理 Dapr actors(我们的服务)之间的所有通信。
简单来说,它负责将所有通信路由到假设接收通信的相应 actor。它充当 message broker(消息代理)。
3. 创建 Redis Publish 服务
让我们继续通过添加我们的 Redis 服务来修改我们的 docker-compose.yml 文件。
将以下代码添加到 docker-compose.yml 的服务部分:
redis-publisher: image: redis restart: always depends_on: - dapr-placement
4. 创建 Dapr Pub-Sub 组件
创建一个 dapr/components 文件夹。然后创建组件文件 redis-pubsub.yaml。
mkdir -p dapr/components cd dapr/components touch redis-pubsub.yaml
然后打开文件并插入我们的 Dapr pub/sub 组件的详细信息
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: redis-pubsub namespace: default spec: type: pubsub.redis version: v1 metadata: - name: redisHost value: redis-publisher:6379 - name: redisPassword value: ""
redisHost 是我们的 Redis 服务 redis-pub 的名称,默认 Redis 端口为 6379。
5. 创建 Redis Dapr Sidecar
正如前面部分反复提到的,服务直接与 Dapr 通信,而不是直接与其他服务通信。Dapr 充当所有服务的中间人。
服务通过它们自己的 Dapr sidecar 直接与 Dapr 通信,Dapr sidecar 将通信传递给 Dapr placement,该 placement 再次将其传递给假设接收通信的服务的 Dapr sidecar。
将 redis-dapr-sidecar 服务添加到我们的 docker-compose.yml
redis-dapr-sidecar: image: "daprio/daprd:edge" command: [ "./daprd"