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 がリリース