Apache Dubbo의 첫 번째 Node.js 3.0 알파 버전이 공식 출시되었습니다.

Apache Dubbo3 소개

Apache Dubbo는 서비스 검색, 트래픽 관리, 관찰 가능성, 인증 및 인증과 같은 엔터프라이즈급 마이크로서비스를 구축하기 위한 기능, 도구 및 모범 사례도 제공하는 사용하기 쉬운 고성능 WEB 및 RPC 프레임워크입니다. 최근 몇 년 동안 개발된 Dubbo3는 Alibaba Group의 모든 비즈니스 라인에서 완전히 홍보되어 수년 동안 실행되어 온 HSF 프레임워크를 성공적으로 대체했으며 동시에 Dubbo3의 다국어 시스템도 빠르게 발전했습니다. 현재 다루는 언어 시스템은 다음과 같습니다.

  • 아파치/더보 [1]  (자바)
  • 아파치/더보고 [2]
  • apache/dubbo-js [3]  (웹、node.js)
  • 아파치/더보러스트 [4]

Dubbo3에서 정의한 Triple 프로토콜을 기반으로 브라우저, 모바일 및 gRPC 호환 RPC 서비스를 쉽게 작성하고 이러한 서비스를 HTTP/1 및 HTTP/2에서 동시에 실행할 수 있습니다. Dubbo Node.js SDK는 IDL 또는 프로그래밍 언어별 방법을 사용하여 서비스 정의를 지원하고 이러한 서비스를 게시하거나 호출하기 위한 경량 API 세트를 제공합니다.

Dubbo3 Node.js의 첫 번째 릴리스 버전 정보

Dubbo-js 프로젝트는 9월에 Dubbo3 프로토콜을 지원하는 첫 번째 알파 버전을 출시했습니다. 이 프로젝트는 Dubbo3의 Typescript 버전 구현이며 Web과 Node.js라는 두 가지 릴리스 패키지를 제공합니다. 그중에서도 웹 프레임워크를 사용하면 개발자가 브라우저 페이지에서 직접 백엔드 서비스에 액세스할 수 있으며 Node.js는 백엔드 마이크로서비스 기술 스택의 선택을 더욱 풍부하게 합니다. 현재 Node.js 버전은 주로 Triple 프로토콜에 대한 완전한 지원을 구현하며, 다음 버전에서는 커뮤니티가 주소 검색 및 로드 밸런싱과 같은 서비스 거버넌스 기능을 계속해서 개선할 것입니다.

Node.js 마이크로서비스 개발 완료 예시

이 예제는 최신 버전의 Node.js를 기반으로 하며 Triple 프로토콜 기반의 RPC 통신 모드를 보여줍니다. 이 예제에서는 프로토콜 버퍼를 사용하여 RPC 서비스를 정의하고 코드 생성, 서비스 게시 및 서비스 액세스 프로세스를 보여줍니다.

전제조건

프로토콜 버퍼를 사용하기 때문에 먼저 @bufbuild/protoc-gen-es, @bufbuild/protobuf, @apachedubbo/protoc-gen-apache-dubbo-es, @apchedubbo/dubbo를 포함한 관련 코드 생성 도구를 설치해야 합니다. .

npm install @bufbuild/protoc-gen-es @bufbuild/protobuf @apachedubbo/protoc-gen-apache-dubbo-es @apachedubbo/dubbo

서비스 정의

이제 IDL(Protocol Buffer)을 사용하여 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 파일을 생성하고 새 서버를 생성한 후 이전 단계에서 구현한 예제 서비스를 여기에 등록합니다.

다음으로, 지정된 포트에서 요청을 수신할 서버를 직접 초기화하고 시작할 수 있습니다.

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 버전은 주로 Triple 프로토콜에 대한 완전한 지원을 구현하며, 다음 버전에서는 커뮤니티가 주소 검색 및 로드 밸런싱과 같은 서비스 거버넌스 기능을 계속해서 개선할 것입니다.

관련된 링크들:

[1] 아파치/더보

https://github.com/apache/dubbo

[2] 아파치/더보고

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

[3] 아파치/dubbo-js

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

[4] 아파치/더보러스트

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

저자: 차이 지아니(蔡 Jianyi)

지금 클라우드 제품을 무료로 사용해 보려면 클릭하여 클라우드에서의 실제 여정을 시작하세요!

원본 링크

이 기사는 Alibaba Cloud의 원본 콘텐츠이므로 허가 없이 복제할 수 없습니다.

200위안 벌금형 및 100만 위안 이상 압수 You Yuxi: 고품질 중국어 문서의 중요성 머스크의 하드코어 서버 마이그레이션 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 출시
{{o.이름}}
{{이름}}

Supongo que te gusta

Origin my.oschina.net/yunqi/blog/10114644
Recomendado
Clasificación