Apache Dubbo の最初の Node.js 3.0 アルファ バージョンが正式にリリースされました

Apache Dubbo3 について

Apache Dubbo は、使いやすく高性能な WEB および RPC フレームワークであり、サービス検出、トラフィック管理、可観測性、認証および認証などのエンタープライズ レベルのマイクロサービスを構築するための機能、ツール、ベスト プラクティスも提供します。近年の開発以降、Dubbo3 はアリババグループの全事業分野で本格的に推進され、長年運用されてきた HSF フレームワークを置き換えることに成功し、同時に Dubbo3 の多言語システムも急速に発展しました。現在カバーされている言語システムは次のとおりです。

  • apache/ダボ[1]  (Java)
  • apache/ダボゴー[2]
  • apache/dubbo-js [3]  (web、node.js)
  • apache/ダボラスト[4]

Dubbo3 によって定義された Triple プロトコルに基づいて、ブラウザー、モバイル、および gRPC 互換の RPC サービスを簡単に作成し、これらのサービスを HTTP/1 と HTTP/2 で同時に実行することができます。Dubbo Node.js SDK は、IDL またはプログラミング言語固有のメソッドを使用したサービスの定義をサポートし、これらのサービスを公開または呼び出すための軽量 API のセットを提供します。

Dubbo3 Node.js の最初のリリース バージョンについて

Dubbo-js プロジェクトは、Dubbo3 プロトコルをサポートする最初のアルファ バージョンを 9 月にリリースしたばかりで、Dubbo3 の Typescript バージョン実装であり、Web と Node.js の 2 つのリリース パッケージを提供しています。その中で、Web フレームワークにより、開発者はブラウザ ページ上でバックエンド サービスに直接アクセスできるようになり、Node.js によりバックエンド マイクロサービス テクノロジ スタックの選択肢がさらに充実します。現在の Node.js バージョンでは、主にトリプル プロトコルの完全なサポートが実装されていますが、次のバージョンでは、コミュニティはアドレス検出や負荷分散などのサービス ガバナンス機能の向上を継続します。

Node.js マイクロサービス開発の完全な例

この例は、最新バージョンの Node.js に基づいており、トリプル プロトコルに基づく RPC 通信モードを示します。この例では、プロトコル バッファーを使用して RPC サービスを定義し、コード生成、サービス公開、およびサービス アクセスのプロセスを示します。

前提条件

プロトコル バッファーを使用するため、最初に @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

サービスを定義する

ここで、プロトコル バッファー (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' });

サーバーの起動

Dubbo サービスは、通常の Node.js サーバー、Next.js、Express、または Fastify に埋め込むことができます。ここでは Fastify を使用するので、Fastify と Fastify 用のプラグインをインストールしましょう。

npm install fastify @apachedubbo/dubbo-fastify

server.ts ファイルを作成し、新しいサーバーを作成し、前の手順で実装した ExampleService をそれに登録します。

次に、指定したポートでリクエストを受信するサーバーを直接初期化して起動できます。

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

アクセスサービス

最も簡単な方法は、標準の JSON 形式で HTTP ペイロードとして渡されるパラメータを使用して、HTTP/1.1 POST リクエストを使用してサービスにアクセスすることです。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 クライアントを使用してサービスを要求することもできます。まず、生成されたコード (つまり dubbo-node パッケージ) からサービス エージェントを取得し、そのサーバー アドレスを指定して初期化する必要があります。その後、サービス エージェントを開始できます。 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 バージョンでは、主にトリプル プロトコルの完全なサポートが実装されていますが、次のバージョンでは、コミュニティはアドレス検出や負荷分散などのサービス ガバナンス機能の向上を継続します。

関連リンク:

[1] アパッチ/ダボ

https://github.com/apache/dubbo

[2] apache/ダボゴー

https://github.com/apache/dubbo-go

[3] apache/dubbo-js

https://github.com/apache/dubbo-js

[4] apache/ダボラスト

https://github.com/apache/dubbo-rust

著者: 蔡建儀

クリックして今すぐクラウド製品を無料で試し、クラウドでの実践的な取り組みを始めましょう!

元のリンク

この記事は Alibaba Cloud のオリジナル コンテンツであり、許可なく複製することはできません。

200元の罰金と100万元以上を没収 ヨウ・ユシ:高品質の中国語文書の重要性 マスク氏のコアなサーバー移行 TCP輻輳制御がインターネットを救った Apache OpenOfficeは事実上の「保守されていない」プロジェクト Googleが創立25周年を祝う Microsoftオープンソースの Windows-drivers-rs、Rust を使用して Windows ドライバを開発 Raspberry Pi 5 は 10 月末にリリースされ、価格は 60 ドルから macOS コンテナ: Docker を使用して macOS 上で macOS イメージを実行 IntelliJ IDEA 2023.3 EAP がリリース
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/yunqi/blog/10114644