乐趣区

关于apache:Apache-Dubbo-首个-Nodejs-30alpha-版本正式发布

对于 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

作者:蔡建怿

点击立刻收费试用云产品 开启云上实际之旅!

原文链接

本文为阿里云原创内容,未经容许不得转载。

退出移动版