您现在的位置是:网站首页> 编程资料编程资料
NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程_node.js_
2023-05-24
337人已围观
简介 NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程_node.js_

Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。Dapr 确保开发人员专注于编写业务逻辑,不必分神解决分布式系统难题,从而显著提高了生产力。Dapr 降低了构建微服务架构类现代云原生应用的门槛。
安装 Dapr CLI
MacOS & Dapr 1.8:
sudo curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | /bin/bash

Linux/Windows 安装方式:
https://docs.dapr.io/getting-started/install-dapr-cli/
本地环境中初始化 Dapr
Dapr 初始化包括:
- 运行一个用于状态存储和消息代理的 Redis 容器实例
- 运行一个用于提供可观察性的 Zipkin 容器实例
- 创建具有上述组件定义的默认组件文件夹
- 运行用于本地 actor(我们的服务) 支持的 Dapr placement 服务容器实例
运行初始化 CLI 命令
dapr init
验证 Dapr 版本
dapr -v CLI version: 1.8.0 Runtime version: 1.8.0
验证容器是否正在运行
如前所述,dapr init 命令会启动几个容器,这些容器将帮助您开始使用 Dapr。 验证您有运行 daprio/dapr、openzipkin/zipkin 和 redis 映像的容器实例:

验证组件目录是否已初始化
在 dapr init 上,CLI 还会创建一个默认组件文件夹,其中包含几个 YAML 文件,其中包含状态存储、Pub/sub 和 Zipkin 的定义。Dapr sidecar 将读取这些组件并使用:
- 用于状态管理和消息传递的 Redis 容器。
- 用于收集踪迹的 Zipkin 容器。
通过打开您的组件目录进行验证:
- Windows, 在
%UserProfile%\.dapr下 - Linux/MacOS, 在
~/.dapr下
ls $HOME/.dapr bin components config.yaml
使用 Dapr API
运行 Dapr sidecar 并试用 state API
运行 Dapr sidecar
dapr run 命令启动一个应用程序,以及一个 sidecar。
启动一个 Dapr sidecar,它将在端口 3500 上侦听名为 myapp 的空白应用程序:
dapr run --app-id myapp --dapr-http-port 3500
由于没有使用上述命令定义自定义组件文件夹,因此 Dapr 使用在 dapr init 流程期间创建的默认组件定义。
保存状态
使用对象更新状态。新状态将如下所示:
[ { "key": "name", "value": "Bruce Wayne" } ] 请注意,包含在状态中的每个对象都有一个分配有值为 name 的 key。您将在下一步中使用该 key。
使用以下命令保存新的状态对象:
curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/statestore 获取状态
使用带有 key 为 name 的状态检索您刚刚存储在 state 中的对象。在同一终端窗口中,运行以下命令:
curl http://localhost:3500/v1.0/state/statestore/name
查看状态如何存储在 Redis 中
docker exec -it dapr_redis redis-cli
列出 Redis 键以查看 Dapr 如何使用您提供给 dapr run 的 app-id 作为 key 的前缀创建键值对:
keys * "myapp||name"
运行以下命令查看状态值:
hgetall "myapp||name" 1) "data" 2) "\"Bruce Wayne\"" 3) "version" 4) "1"
使用以下命令退出 Redis CLI:
exit
删除状态
在同一终端窗口中,从状态存储中删除 name 状态对象。
curl -v -X DELETE -H "Content-Type: application/json" http://localhost:3500/v1.0/state/statestore/name
上手实战指南
所有官方示例笔者均在 MacOS/NodeJs v16.16.0 下实战完成。
1. 服务调用
使用 Dapr 的服务调用构建块,您的应用程序可以与其他应用程序可靠且安全地通信。

示例仓库
git clone https://github.com/dapr/quickstarts.git
运行 order-processor 服务
从 quickstarts 的根目录导航到 order-processor 目录。
cd service_invocation/javascript/http/order-processor
安装依赖项:
npm install
与 Dapr sidecar 一起运行 order-processor 服务。
dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start
app.post('/orders', (req, res) => { console.log("Order received:", req.body); res.sendStatus(200); }); 运行 checkout 服务
在新的终端窗口中,从 quickstarts 根目录导航到 checkout 目录。
cd service_invocation/javascript/http/checkout
安装依赖项:
npm install
与 Dapr sidecar 一起运行 checkout 服务。
dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 -- npm start
在 checkout 服务中,您会注意到无需重写您的应用程序代码即可使用 Dapr 的服务调用。您可以通过简单地添加 dapr-app-id header 来启用服务调用,该 header 指定目标服务的 ID。
let axiosConfig = { headers: { "dapr-app-id": "order-processor" } }; const res = await axios.post(`${DAPR_HOST}:${DAPR_HTTP_PORT}/orders`, order , axiosConfig); console.log("Order passed: " + res.config.data); 查看服务调用输出
Dapr 在任何 Dapr 实例上调用应用程序。在代码中,sidecar 编程模型鼓励每个应用程序与其自己的 Dapr 实例通信。Dapr 实例随后发现并相互通信。
checkout & order-processor 服务输出:

2. 状态管理

让我们看一下 Dapr 的状态管理构建块。您将使用 Redis 进行状态存储,来保存、获取和删除你的状态,您也可以将其换成任何一种受 Dapr 支持的状态存储。
操纵服务状态
在终端窗口中,导航到 order-processor 目录。
cd state_management/javascript/sdk/order-processor
安装依赖项,其中将包括 JavaScript SDK 中的 dapr-client 包:
npm install
验证您在服务目录中包含以下文件:
package.jsonpackage-lock.json
与 Dapr sidecar 一起运行 order-processor 服务。
dapr run --app-id order-processor --components-path ../../../components/ -- npm run start
order-processor 服务将 orderId key/value 写入、读取和删除到 statestore.yaml 组件中定义的 statestore 实例。一旦服务启动,它就会执行一个循环。
const client = new DaprClient(DAPR_HOST, DAPR_HTTP_P
相关内容
- JQuery实现简单瀑布流布局_jquery_
- JQuery实现电梯导航效果_jquery_
- element table 表格控件实现单选功能_vue.js_
- JavaScript实现一键复制内容剪贴板_JavaScript_
- 从原生JavaScript到React深入理解_JavaScript_
- 关于Element-ui中el-table出现的表格错位问题解决_vue.js_
- vue-router传参的4种方式超详细讲解_vue.js_
- vue-json-editor json编辑器的使用_vue.js_
- Vue调试工具vue-devtools的安装与使用_vue.js_
- VUE使用vue create命令创建vue2.0项目的全过程_vue.js_
点击排行
本栏推荐
