Nest.js Microservices

이건선·2023년 6월 29일
0

해결

목록 보기
45/48

Nest.js는 Microservices 아키텍처를 지원하며, TCP, Redis, MQTT, NATS, RabbitMQ, gRPC와 같은 다양한 메시지 전송 전략을 사용할 수 있습니다.

npm 설치

@nestjs/microservices

설치하려는 @nestjs/microservices버전이 @nestjs/common 또는 @nestjs/core와 일치하지 않다면 설치되지 않습니다. 버전 충돌로 인한 오류가 발생한다면 모든 NestJS 관련 패키지를 최신 버전으로 일괄 업데이트하면 해결될 수 있습니다. chaining commands로 한번에 설치합니다.


Microservices예시

import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { AppController } from './app.controller';

@Module({
  imports: [
    ClientsModule.register([
      {
        name: 'MATH_SERVICE',
        transport: Transport.TCP,
        options: {
          host: 'localhost',
          port: 3001,
        },
      },
    ]),
  ],
  controllers: [AppController],
})
export class AppModule {}

MATH_SERVICE라는 이름의 마이크로서비스를 등록하고, TCP 전송을 사용하여 localhost의 3001 포트로 메시지를 전송합니다. 이 설정은 애플리케이션에서 이 마이크로서비스를 호출할 때 사용됩니다.

import { Controller, Get } from '@nestjs/common';
import { Client, ClientProxy, Transport } from '@nestjs/microservices';
import { Observable } from 'rxjs';

@Controller()
export class AppController {
  @Client({ transport: Transport.TCP, options: { host: 'localhost', port: 3001 } })
  client: ClientProxy;

  @Get()
  call(): Observable<number> {
    const pattern = { cmd: 'sum' };
    const payload = [1, 2, 3, 4, 5];
    return this.client.send<number>(pattern, payload);
  }
}

Client 데코레이터를 사용하여 TCP를 통해 메시지를 전송하는 ClientProxy를 주입합니다. 그리고 나서, GET 요청이 들어올 때마다, { cmd: 'sum' } 패턴과 함께 payload를 전송하는 call 메서드를 실행합니다.

이렇게 하면, TCP를 통해 MATH_SERVICE 마이크로서비스로 메시지를 전송할 수 있게 됩니다. 이 메시지는 { cmd: 'sum' } 패턴을 처리하는 핸들러에 의해 받아들여지고 처리됩니다.

요약

@Module에서는 마이크로서비스 클라이언트를 설정하고 등록합니다. 이 설정은 애플리케이션 전반에 걸쳐 사용될 수 있습니다.
@Controller에서는 특정 컨트롤러 내에서 이러한 마이크로서비스를 호출하기 위해 ClientProxy 인스턴스를 생성하고 설정합니다.

profile
멋지게 기록하자

0개의 댓글