Dapr 官方教程第三章(分布式计算器) 电脑版发表于:2021/8/30 13:58 ![](https://img.tnblog.net/arcimg/hb/896fd38e95b346f9a0d98c54b135bb94.jpg) >#Dapr 官方教程第三章(分布式计算器) [TOC] tn2>本快速入门通过分布式计算器展示了 Dapr 的方法调用和状态持久性功能,其中每个操作都由以不同语言/框架编写的不同服务提供支持: ——添加(+): Go mux应用程序 ——乘法(*):Python Flask应用程序 ——除法(/):Node Express应用 ——减法(-):.NET Core应用程序 前端应用程序由一个服务器和一个用React编写的客户端组成。 以下架构图说明了构成本快速入门的组件: ![](https://img.tnblog.net/arcimg/hb/86482d907a9944ad80c6d410662866de.png) 先决条件 ------------ tn2>获取本教程资源 ```bash git clone https://github.com/dapr/quickstarts.git cd quickstarts/distributed-calculator/ ``` >### 在本地运行 <span/> >- Install Docker - Install .Net Core SDK 3.1 - Install Dapr CLI - Install Go - Install Python3 - Install Npm - Install Node >### 在 Kubernetes 环境中运行 tn2>支持 Dapr 的 Kubernetes 集群。按照这些说明进行设置。 在本地运行快速入门 ------------ tn2>初始化dapr ```bash dapr init ``` ![](https://img.tnblog.net/arcimg/hb/caa11591acf64ef3a4fd0797d60f8848.png) tn2>这些指令在本地启动四个计算器运算符应用程序(加、减、乘和除)以及 dapr sidecar,然后运行前端应用程序,该应用程序将状态保存在本地 redis 状态存储中。 >### 部署加法应用(go) tn2>添加应用程序 - 打开终端窗口并导航到 go 目录并按照以下步骤操作: ```bash cd go/ ``` tn2>安装 gorilla/mux 包运行: ```bash go get -u github.com/gorilla/mux ``` tn2>构建应用程序: ```bash go build app.go ``` tn2>使用以下命令运行 dapr: ```bash dapr run --app-id addapp --app-port 6000 --dapr-http-port 3503 ./app ``` ![](https://img.tnblog.net/arcimg/hb/657f95c211a142409ffdbd365dc1a4fe.png) >### 部署减法应用(.netcore) tn2>打开终端窗口并导航到 csharp 目录并按照以下步骤操作: ```bash cd csharp/ ``` ![](https://img.tnblog.net/arcimg/hb/f5a93b798d0046ed97f375f6ec22eece.png) tn2>设置环境变量以使用非默认应用程序端口`7000` ```bash #Linux/Mac OS: export ASPNETCORE_URLS="http://localhost:7000" #Windows: set ASPNETCORE_URLS=http://localhost:7000 ``` tn2>构建应用程序: ```bash dotnet build ``` tn2>导航到 `./bin/Debug/netcoreapp3.1` 并使用以下命令启动 Dapr: ```bash cd ./bin/Debug/netcoreapp3.1 dapr run --app-id subtractapp --app-port 7000 --dapr-http-port 3504 dotnet Subtract.dll ``` ![](https://img.tnblog.net/arcimg/hb/f8803bca57f94c29a15b27897b65a9f3.png) >### 部署除法应用(.netcore) tn2>先安装`.netcore3.1`SDK,可以直接到该链接去<a href="https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-3.1.412-linux-arm64-binaries" target="_blank">下载</a> ```bash wget https://download.visualstudio.microsoft.com/download/pr/f9f54199-f0b3-43ac-badd-f9ef6867641c/50bd985f26c59f5d63f29f571f7f89e5/dotnet-sdk-3.1.412-linux-arm64.tar.gz # 添加到环境变量中 mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.1.412-linux-arm64.tar.gz -C $HOME/dotnet export DOTNET_ROOT=$HOME/dotnet export PATH=$PATH:$HOME/dotnet ``` ![](https://img.tnblog.net/arcimg/hb/019eed54df5643888e148330281d3e6c.png) tn2>打开终端窗口并导航到节点目录并按照以下步骤操作: ```bash cd quickstarts/distributed-calculator/node ``` tn2>通过运行以下命令安装依赖项: ```bash npm install ``` tn2>使用以下命令启动 Dapr: ```bash dapr run --app-id divideapp --app-port 4000 --dapr-http-port 3502 node app.js ``` ![](https://img.tnblog.net/arcimg/hb/9b92f09da2b741ccb4266989dc314122.png) >### 部署乘法应用(python) tn2>打开终端窗口并导航到 python 目录并按照以下步骤操作: ```bash cd quickstarts/distributed-calculator/python/ ``` tn2>安装所需的包 ```bash pip3 install wheel python-dotenv flask_cors flask ``` tn2>设置环境变量以使用非默认应用程序端口`5000` ```bash #Linux/Mac OS: export FLASK_RUN_PORT=5000 #Windows: set FLASK_RUN_PORT=5000 ``` tn2>使用以下命令启动 dapr: ```bash dapr run --app-id multiplyapp --app-port 5000 --dapr-http-port 3501 flask run ``` ![](https://img.tnblog.net/arcimg/hb/d8f7facbe187411fb35781527e72399b.png) >### 部署前端应用(react) tn2>打开终端窗口并导航到 react-calculator 目录并按照以下步骤操作: ```bash cd quickstarts/distributed-calculator/react-calculator/ ``` tn2>安装所需的模块 ```bash npm install npm run buildclient ``` tn2>使用以下命令启动 Dapr ```bash dapr run --app-id frontendapp --app-port 8080 --dapr-http-port 3500 node server.js ``` ![](https://img.tnblog.net/arcimg/hb/8fa012921a5e47aaa5615ce780fd0f4e.png) >### 确保所有应用启动成功 ```bash cd quickstarts/distributed-calculator/ ``` ```bash curl -s http://localhost:8080/calculate/add -H Content-Type:application/json --data @operands.json curl -s http://localhost:8080/calculate/subtract -H Content-Type:application/json --data @operands.json curl -s http://localhost:8080/calculate/divide -H Content-Type:application/json --data @operands.json curl -s http://localhost:8080/calculate/multiply -H Content-Type:application/json --data @operands.json curl -s http://localhost:8080/persist -H Content-Type:application/json --data @persist.json curl -s http://localhost:8080/state ``` tn2>应该得到如下结果 ![](https://img.tnblog.net/arcimg/hb/a11ca7df5d39409ca9089672fcfd3dd9.png) >### 访问 tn2>访问浏览器`http://localhost:8080/`地址 ![](https://img.tnblog.net/arcimg/hb/f52e1946662c4312b4e0532b84a647c8.png) tn2>点了一些计算后我们来看看它的链路`zipkin`,也就是`9411`端口 ![](https://img.tnblog.net/arcimg/hb/5259e2d7572f4888bba133746125ae33.png) ![](https://img.tnblog.net/arcimg/hb/5da3418c4cab4fd3b87693a2c0bee496.png) >### 清理 ```bash dapr stop --app-id addapp dapr stop --app-id subtractapp dapr stop --app-id divideapp dapr stop --app-id multiplyapp dapr stop --app-id frontendapp cd node npm uninstall ``` 在 Kubernetes 环境中运行快速入门 ------------ tn2>初始化dapr ```bash dapr init -k ``` ![](https://img.tnblog.net/arcimg/hb/dbc8cd9b8f8747e6bb63d91de33c2586.png) tn2>(可选)创建Redis,如果本地没有运行的Redis请按照如下步骤走 ```bash # 通过 docker 创建 redis docker pull redis:latest docker run -itd --name redis-test -p 6379:6379 redis ``` tn2>通过`ifconfig`查看Ip地址:172.17.0.27 ![](https://img.tnblog.net/arcimg/hb/6f1d0ebb53214563b8dbf148924f50ce.png) tn2>到部署目录中,修改`redis.yaml`,添加上redis地址 ```bash cd deploy vim redis.yaml ``` ![](https://img.tnblog.net/arcimg/hb/2df9db0ef60444e2b4a63e8deb1c500c.png) tn2>开始部署 ```bash kubectl apply -f . ``` ![](https://img.tnblog.net/arcimg/hb/2d8f9ce0bf0e41799611633fa8c0382e.png) tn2>我们可以通过如下两个命令观察部署情况 ```bash kubectl get pod -w # 或 kubectl get pod,deploy.svc ``` ![](https://img.tnblog.net/arcimg/hb/bd31f12c1fc347b883b6cceb833d8f7f.png) tn2>接着我们设置服务的访问 ```bash kubectl port-forward service/calculator-front-end 8000:80 ``` ![](https://img.tnblog.net/arcimg/hb/fd042b8ddb6045298f887c4cc926b315.png) tn2>最后清理 ```bash kubectl delete -f . ```