Nest Js를 사용하는 Kafka 마이크로서비스

여러분 안녕하세요,

당신이 잘하고 있기를 바랍니다.
이 기사에서는 NestJ와 Kafka를 사용하여 마이크로 서비스를 설정하는 방법에 대해 알아볼 것입니다.

내가 이 글을 쓰기 시작한 이유는?
나는 최근에 하나를 설정하고 싶었고 좋은 예를 찾기 위해 고군분투했습니다. 몇 시간 동안의 인터넷 검색 끝에 가능했습니다. 그래서 저는 동료 개발자들의 삶을 더 쉽게 만들기 위해 여기 있습니다.

참고: 여기서는 Kafka 또는 NestJ에 대해 설명하지 않습니다. 따라서 구현하는 동안 이에 대한 몇 가지 기본 지식이 도움이 될 것입니다.

시작하자!!!

Windows/ubuntu에 설치하려면 다음을 참조하십시오.
windows
ubuntu

Homebrew를 사용하여 Mac에 Kafka를 설치하려면:

$ brew cask install java
$ brew install Kafka


Zookeeper를 시작하려면:

zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties


참고: Zookeeper는 Kafka 서버를 시작하기 전에 항상 시작해야 합니다.

카프카를 시작하려면:

kafka-server-start /usr/local/etc/kafka/server.properties


Kafka가 제대로 작동하는지 확인하자



주제를 만들려면:

kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic my-first-topic


Producer 콘솔을 생성하려면:

kafka-console-producer --broker-list localhost:9092 --topic my-first-topic


소비자 콘솔을 생성하려면:

kafka-console-consumer --bootstrap-server localhost:9092 --topic my-first-topic --from-beginning


이제 Producer 콘솔에서 사용자 입력을 수락할 수 있습니다. 생산자 콘솔에 입력한 내용은 소비자 콘솔에서 볼 수 있어야 합니다.

이제 코드를 작성해 보겠습니다.



NestJs 애플리케이션을 만들어 봅시다.

nest new kafka-consumer


애플리케이션이 생성되면 마이크로서비스 모듈과 Kafka 클라이언트 라이브러리가 필요합니다.

npm i --save @nestjs/microservices
npm i --save kafkajs


이제 Kafka Transport를 수락하고 Kafka 구성을 제공하도록 main.ts를 업데이트해야 합니다.

// main.ts

import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';

import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
    transport: Transport.KAFKA,
    options: {
      client: {
        brokers: ['localhost:9092'],
      },
      consumer: {
          groupId: 'my-kafka-consumer',
      }
    }
  });

  app.listen(() => console.log('Kafka consumer service is listening!'))
}
bootstrap();



app.controller.ts에서 우리는 우리의 주제를 듣고 있습니다.

import { Controller } from '@nestjs/common';
import { MessagePattern, Payload } from "@nestjs/microservices";
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) { }

  @MessagePattern('my-first-topic') // Our topic name
  getHello(@Payload() message) {
    console.log(message.value);
    return 'Hello World';
  }
}


서버 시작

npm start


이제 생산자 콘솔로 돌아가서 메시지를 보내겠습니다. 이제 메시지가 애플리케이션 콘솔에 기록되어야 합니다.

짜잔!. 이제 Kafka 마이크로 서비스를 성공적으로 설정했습니다.

Nest js 애플리케이션 내부에 프로듀서를 설정하고 싶다면 따라주세요.

애플리케이션 생성 및 필요한 종속성 설치

nest new kafka-producer
npm i --save @nestjs/microservices
npm i --save kafkajs


app.controller.ts에서 생산자를 설정합니다.

import { Controller, Get } from '@nestjs/common';
import { Client, ClientKafka, Transport } from "@nestjs/microservices";
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) { }

  @Client({
    transport: Transport.KAFKA,
    options: {
      client: {
        clientId: 'kafkaSample',
        brokers: ['localhost:9092'],
      },
      consumer: {
        groupId: 'my-kafka-consumer' // Should be the same thing we give in consumer
      }
    }
  })
  client: ClientKafka;

  async onModuleInit() {
    // Need to subscribe to topic 
    // so that we can get the response from kafka microservice
    this.client.subscribeToResponseOf('my-first-topic');
    await this.client.connect();
  }

  @Get()
  getHello() {
    return this.client.send('my-first-topic', 'Hello Kafka'); // args - topic, message
  }
}



아직 시작하지 않은 경우 이전에 시작한 생산자 콘솔 및 소비자 콘솔을 종료합니다.

서버 시작

npm start


이제 Rest API 클라이언트를 열고
GET: http://localhost:3000/

이제 Kafka 마이크로서비스에서 보낸 응답으로 Hello World를 볼 수 있습니다.

여기에서 소스 코드를 찾을 수 있습니다.
Consumer Sample
Producer Sample

P.S 첫 블로그 글입니다. 자유롭게 피드백을 주십시오.

좋은 웹페이지 즐겨찾기