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

