Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
关于Apache Dubbo3
Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。经过近几年发展,Dubbo3 已在阿里巴巴集团各条业务线实现全面推广,成功取代运行多年的 HSF 框架,同时 Dubbo3 的多语言体系也有了快速发展,目前涵盖的多语言体系有
- apache/dubbo[1] (java)
- apache/dubbo-go[2]
- apache/dubbo-js[3] (web、node.js)
- apache/dubbo-rust[4]
基于 Dubbo3 定义的 Triple 协议,你可以轻松编写浏览器、移动端、gRPC 兼容的 RPC 服务,并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。Dubbo Node.js SDK 支持使用 IDL 或编程语言特有的方式定义服务,并提供一套轻量的 API 来发布或调用这些服务。
关于 Dubbo3 Node.js 首个发布版
Dubbo-js 项目于 9 月份刚刚发布了支持 Dubbo3 协议的首个 alpha 版本,该项目是 Dubbo3 的 Typescript 版本实现,提供了 Web、Node.js 两种发布包。其中,Web 框架能让开发者直接在浏览器页面访问后端服务,Node.js 则进一步丰富了后端微服务技术栈的选择。当前 Node.js 版本主要是实现了 Triple 协议的完整支持,接下来的版本中,社区将继续完善地址发现、负载均衡等服务治理能力。
Node.js 微服务开发完整示例
本示例基于最新发布的 Node.js 版本,演示了基于 Triple 协议的 RPC 通信模式,示例使用 Protocol Buffer 定义 RPC 服务,并演示了代码生成、服务发布和服务访问等过程。
前置条件
因为使用 Protocol Buffer 的原因,我们首先需要安装相关的代码生成工具,这包括 @bufbuild/protoc-gen-es、@bufbuild/protobuf、@apachedubbo/protoc-gen-apache-dubbo-es、@apachedubbo/dubbo。
npm install @bufbuild/protoc-gen-es @bufbuild/protobuf @apachedubbo/protoc-gen-apache-dubbo-es @apachedubbo/dubbo
定义服务
现在,使用 Protocol Buffer (IDL) 来定义一个 Dubbo 服务。
创建目录,并生成文件:
mkdir -p proto && touch proto/example.proto
写入内容:
syntax = "proto3"; package apache.dubbo.demo.example.v1; message SayRequest { string sentence = 1; } message SayResponse { string sentence = 1; } service ExampleService { rpc Say(SayRequest) returns (SayResponse) {} }
这个文件声明了一个叫做 ExampleService 的服务,为这个服务定义了 Say 方法以及它的请求参数 SayRequest 和返回值 SayResponse。
生成代码
创建 gen 目录,做为生成文件放置的目标目录。
mkdir -p gen
运行以下命令,在 gen 目录下生成代码文件:
PATH=$PATH:$(pwd)/node_modules/.bin \ protoc -I proto \ --es_out gen \ --es_opt target=ts \ --apache-dubbo-es_out gen \ --apache-dubbo-es_opt target=ts \ example.proto
运行命令后,应该可以在目标目录中看到以下生成的文件:
├── gen │ ├── example_dubbo.ts │ └── example_pb.ts ├── proto │ └── example.proto
实现服务
接下来我们就需要添加业务逻辑了,实现 ExampleService ,并将其注册到 DubboRouter 中。
创建 dubbo.ts 文件:
import { DubboRouter } from "@apachedubbo/dubbo"; import { ExampleService } from "./gen/example_dubbo"; export default (router: DubboRouter) => // registers apache.dubbo.demo.example.v1 router.service(ExampleService, { // implements rpc Say async say(req) { return { sentence: `You said: ${req.sentence}`, }; }, }, { serviceGroup: 'dubbo', serviceVersion: '1.0.0' });
启动 Server
Dubbo 服务可以嵌入到普通的 Node.js 服务器、Next.js、Express 或 Fastify 中。在这里我们将使用 Fastify,所以让我们安装 Fastify 以及我们为 Fastify 准备的插件。
npm install fastify @apachedubbo/dubbo-fastify
创建 server.ts 文件,新建一个 Server,把上一步中实现的 ExampleService 注册给它。
接下来就可以直接初始化和启动 Server 了,它将在指定的端口接收请求。
import { fastify } from "fastify"; import { fastifyDubboPlugin } from "@apachedubbo/dubbo-fastify"; import routes from "./dubbo"; async function main() { const server = fastify(); await server.register(fastifyDubboPlugin, { routes, }); server.get("/", (_, reply) => { reply.type("text/plain"); reply.send("Hello World!"); }); await server.listen({ host: "localhost", port: 8080 }); console.log("server is listening at", server.addresses()); } void main();
最后,运行代码启动服务。
npx tsx server.ts
访问服务
最简单的方式是使用 HTTP/1.1 POST 请求访问服务,参数则作以标准 JSON 格式作为 HTTP 负载传递。如下是使用 cURL 命令的访问示例:
curl \ --header 'Content-Type: application/json' \ --header 'TRI-Service-Version: 1.0.0' \ --header 'TRI-Service-group: dubbo' \ --data '{"sentence": "Hello World"}' \ http://localhost:8080/apache.dubbo.demo.example.v1.ExampleService/Say
也可以使用标准的 Dubbo client 请求服务,我们首先需要从生成代码即 dubbo-node 包中获取服务代理,为它指定 server 地址并初始化,之后就可以发起起 RPC 调用了。
创建 client.ts 文件。
import { createPromiseClient } from "@apachedubbo/dubbo"; import { ExampleService } from "./gen/example_dubbo"; import { createDubboTransport } from "@apachedubbo/dubbo-node"; const transport = createDubboTransport({ baseUrl: "http://localhost:8080", httpVersion: "1.1", }); async function main() { const client = createPromiseClient(ExampleService, transport, { serviceVersion: '1.0.0', serviceGroup: 'dubbo' }); const res = await client.say({ sentence: "Hello World" }); console.log(res); } void main();
运行客户端:
npx tsx client.ts
总结
当前 Node.js 版本主要是实现了 Triple 协议的完整支持,接下来的版本中,社区将继续完善地址发现、负载均衡等服务治理能力
相关链接:
[1] apache/dubbo
https://github.com/apache/dubbo
[2] apache/dubbo-go
https://github.com/apache/dubbo-go
[3] apache/dubbo-js
https://github.com/apache/dubbo-js
[4] apache/dubbo-rust
https://github.com/apache/dubbo-rust
作者:蔡建怿
点击立即免费试用云产品 开启云上实践之旅!
本文为阿里云原创内容,未经允许不得转载。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何利用OpenNJet动态配置故障注入
NGINX 向云原生演进,All inOpenNJet 中断导致的服务中断可能会造成严重的业务后果,因此构建、运行和测试弹性系统非常重要。系统的弹性源自其各部分的弹性:系统的每个部分都能够处理一定数量的错误或故障。无论是后续的服务不可用、网络延迟还是数据可用性问题,分布式系统都充满了相应的错误处理的隐含非功能性需求。 什么故障注入? 故障注入是软件测试的补充技术,用于提高软件性能和弹性。通常的 测试方法验证软件的正确行为,而故障注入则通过故意注入的故障来评估软件的正确行为。 HTTP故障注入,支持中止(abort)来自下游服务的Http请求,和/或延迟(delay)代理请求,一个故障规则必须具有延迟或中止或两者兼有。在将HTTP请求转发到路由中指定的目的地时,可以注入一个或多个故障。故障注入策略应用于客户端HTTP流量。 延迟规范用于在请求转发路径中注入延迟。 中止规范用于提前中止一个请求,并返回一个预先指定的错误码。 类型 故障注入主要有三种类型,同一个location下,只允许配置一种: Delay: 只注入延迟故障,延迟时间到后,再发起对upstream的连接请求 Abort:只...
- 下一篇
袋鼠云代码检查服务,揭秘高质量代码背后的秘密
质量是产品的生命线,代码检查是软件开发过程中至关重要的一环,它可以帮助我们发现并纠正潜在的错误,提高软件质量,降低维护成本。 在袋鼠云产品中也存在这个问题,由于离线数据开发人员 SQL 水平不一,导致代码书写混乱、SQL 代码运行问题较多。本文将介绍在离线产品中如何利用 SQL 检查规则规范化 SQL 代码,对代码书写问题进行拦截,便于统一管理,用于预防引入需要治理的问题。 通过本文的介绍,我们希望您能够认识到代码检查的重要性,并了解如何通过最佳实践来提高代码质量和开发效率。 何时进行代码规则检查? SQL 任务在离线产品界面开发完成之后,点击运行的按钮,会先经过代码规则检查,如果代码规则不满足则会提示到用户具体的原因。 数据资产模块内置了 5 种代码检查规则,用户可以根据需要选择性开启。 开启后在离线项目管理中可以选择使用的代码规则检查项、生效范围和 SQL 任务类型。 在离线 SQL 任务中去运行一条 SQL 前会根据选择的规则先进行代码检查,如果代码检查不通过则会反馈给用户,用户可以根据实际需要判断要不要执行该 SQL。 在数据资产的代码检查时间中可以看到已经触发的检查历史以及相...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境