您现在的位置是:网站首页> 编程资料编程资料

NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程_node.js_

2023-05-24 339人已围观

简介 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/dapropenzipkin/zipkinredis 映像的容器实例:

验证组件目录是否已初始化

dapr init 上,CLI 还会创建一个默认组件文件夹,其中包含几个 YAML 文件,其中包含状态存储、Pub/subZipkin 的定义。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" } ] 

请注意,包含在状态中的每个对象都有一个分配有值为 namekey。您将在下一步中使用该 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.json
  • package-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
                
                

-六神源码网