Dapr 官方教程第四章(发布订阅) 电脑版发表于:2021/9/1 12:01 ![](https://img.tnblog.net/arcimg/hb/896fd38e95b346f9a0d98c54b135bb94.jpg) >#Dapr 官方教程第四章(发布订阅) [TOC] <br/> >在本快速入门中,您将创建一个发布者微服务和两个订阅者微服务,以演示 Dapr 如何启用发布订阅模式。发布者将生成特定主题的消息,而订阅者将收听特定主题的消息。请参阅Why Pub-Sub以了解此模式何时可能是您的软件架构的不错选择。 本快速入门包括一位出版商: - React 前端消息生成器 >还有两个订阅者: - Node.js 订阅者 - Python订阅者 >Dapr 使用可插入的消息总线来启用发布-订阅,并在符合Cloud Events 的消息信封中将消息传递给订阅者。在这种情况下,您将使用 Redis Streams(在 Redis 版本 => 5 中启用)。以下架构图说明了组件如何在本地互连: ![](https://img.tnblog.net/arcimg/hb/7fca409d98d44a4ca2a7a6787b9d6396.png) 先决条件 ------------ >### 本地运行的先决条件 tn2>1.Dapr CLI 与 Dapr 初始化 2.Node.js 8 或更高版本和/或Python 3.6 或更高版本:您可以使用一个或两个微服务运行此快速入门 >### 在 Kubernetes 中运行的先决条件 tn2>启用 Dapr 的 Kubernetes 集群 在本地运行 ------------ ```bash # 初始化 dapr init ``` tn2>为了在本地运行发布/订阅快速入门,每个微服务都需要与 Dapr 一起运行。首先运行消息订阅者。 tn>注意:这些说明部署了一个 Node 订阅者和一个 Python 订阅者,但如果您没有 Node 或 Python,请随意运行一个。 >### 克隆快速入门存储库 tn2>将此快速入门存储库克隆到您的本地计算机: ```bash git clone https://github.com/dapr/quickstarts.git cd quickstarts/pub-sub/ ``` ![](https://img.tnblog.net/arcimg/hb/3df3b05403c34681b9a453ee292de77a.png) >### 使用 Dapr 运行节点消息订阅者 tn2>在 CLI 中导航到 Node 订阅者目录: ```bash cd node-subscriber ``` tn2>安装依赖: ```bash npm install ``` tn2>使用 Dapr 运行 Node 订阅者应用程序: ```bash dapr run --app-id node-subscriber --app-port 3000 node app.js ``` ![](https://img.tnblog.net/arcimg/hb/287db2bdabce48f980d60ce2a511b6ad.png) tn2>`app-id`它可以是微服务的任何唯一标识符。`app-port`, 是运行 Node 应用程序的端口。最后,`node app.js`传递运行应用程序的命令。 >### 使用 Dapr 运行 Python 消息订阅者 tn>环境最好python3.6+,如果需要升级可以参考这篇:https://www.cnblogs.com/jsdy/p/12694908.html tn2>打开一个新的 CLI 窗口并导航到 CLI 中的 Python 订阅者目录: ```bash cd python-subscriber ``` tn2>安装依赖: ```bash pip3 install -r requirements.txt # 或者 python -m pip install -r requirements.txt ``` tn2>使用 Dapr 运行 Python 订阅者应用程序: ```bash dapr run --app-id python-subscriber --app-port 5000 python3 app.py ``` >### 使用 Dapr 运行 React 前端 tn2>现在,使用 Dapr 运行 React 前端。前端将发布订阅者将接收的不同类型的消息。 打开一个新的 CLI 窗口并导航到 react-form 目录: ```bash cd react-form ``` tn2>使用 Dapr 运行 React 前端应用程序: ```bash npm run buildclient npm install dapr run --app-id react-form --app-port 8080 npm run start ``` ![](https://img.tnblog.net/arcimg/hb/479c8cb4b5f84f5882479884ab340e73.png) tn2>接着我们访问`8080`端口访问前端 ![](https://img.tnblog.net/arcimg/hb/a32c202d5b414a08b023006877d59eb6.png) ![](https://img.tnblog.net/arcimg/hb/237891d51c774c5ea60cc5932a414d66.png) tn2>发布多个主题的`hello`消息,然后在Zipkin查看我这A发到哪儿了 ![](https://img.tnblog.net/arcimg/hb/55551d4686a544b2a5601c86e0bb49ac.png) tn2>这里我们发现它发送的链接地址为`/v1.0/publish/pubsub/{主题名}`; 格式一般是:`http://localhost:<DAPR_URL>/publish/<PUBSUB_NAME>/<TOPIC>` 接着我们查看发布的dapr日志记录。 >这是(React)前端发送的消息 ![](https://img.tnblog.net/arcimg/hb/7486c239ecf9449b956d73e4e3aa209d.png) >这是(node)处理的消息 ![](https://img.tnblog.net/arcimg/hb/8fe830480eaa4faebb983cda519e536f.png) >### 使用 CLI 向订阅者发布消息 tn2>Dapr CLI 提供了一种机制来发布用于测试目的的消息。 ```bash # 使用 Dapr CLI 发布消息: dapr publish --publish-app-id react-form --pubsub pubsub --topic A --data-file message_a.json ``` tn>注意:如果您在无法轻松访问 Web 浏览器的环境中运行,以下 curl 命令将模拟对节点服务器的浏览器请求。 ```bash curl -s http://localhost:8080/publish -H Content-Type:application/json --data @message_b.json curl -s http://localhost:8080/publish -H Content-Type:application/json --data @message_c.json ``` tn2>清理 ```bash dapr stop --app-id node-subscriber dapr stop --app-id python-subscriber dapr stop --app-id react-form ``` 在 Kubernetes 中运行 ------------ ![](https://img.tnblog.net/arcimg/hb/cacd202b9c854f968708ee2f8a47ce86.png) ```bash dapr init -k cd deploy/ ``` tn2>要在 Kubernetes 中运行相同的代码,首先设置一个 Redis 存储,然后部署微服务。您将使用相同的微服务,但最终架构会有所不同: >### 设置Redis存储 ```bash # 通过 docker 创建 redis docker pull redis:latest docker run -itd --name redis-test -p 6379:6379 redis # 查看ip ifconfig vim redis.yaml ``` ![](https://img.tnblog.net/arcimg/hb/f8c6822229e248d08f5b4170515293c4.png) >### 部署项目 ```bash kubectl apply -f . ``` ![](https://img.tnblog.net/arcimg/hb/2425efe85f8c44bc87f48e3cbd5c0673.png) ![](https://img.tnblog.net/arcimg/hb/96ca8f83020344c4980fb6407095c071.png) ![](https://img.tnblog.net/arcimg/hb/0c8a32089b4c40f2acfa02b8a282f660.png)