본문 바로가기

개발

Node.js 메시징 시스템의 통합, RabbitMQ, Kafka 사용법

메시징 시스템의 통합은 분산 시스템에서 실시간 데이터 처리와 이벤트 기반 아키텍처를 구축하는 데 중요한 역할을 합니다. 이를 통해 안정성, 확장성, 비동기 처리 등 다양한 이점을 얻을 수 있습니다. 대표적인 메시징 시스템으로는 RabbitMQ와 Kafka가 있습니다. 각각의 통합 방법과 예시 코드를 살펴보겠습니다.

 

RabbitMQ 통합

RabbitMQ는 AMQP(Advanced Message Queuing Protocol) 프로토콜을 사용하여 메시지 큐 기능을 제공합니다. RabbitMQ와 Node.js를 통합하기 위해 amqplib 라이브러리를 사용할 수 있습니다. 이 라이브러리를 사용하면 RabbitMQ와의 연결, 메시지 송수신 등을 간편하게 처리할 수 있습니다.

다음은 RabbitMQ와 Node.js를 통합하여 메시지를 송수신하는 예제 코드입니다.

const amqp = require('amqplib');

// RabbitMQ 연결
amqp.connect('amqp://localhost')
  .then(connection => connection.createChannel())
  .then(channel => {
    const queueName = 'my_queue';

    // 메시지 수신
    channel.assertQueue(queueName);
    channel.consume(queueName, msg => {
      console.log('수신한 메시지:', msg.content.toString());
    }, { noAck: true });

    // 메시지 송신
    const message = 'Hello, RabbitMQ!';
    channel.assertQueue(queueName);
    channel.sendToQueue(queueName, Buffer.from(message));
    console.log('메시지 전송 완료:', message);
  })
  .catch(error => {
    console.error('오류 발생:', error);
  });

 

위의 예제에서는 amqplib 라이브러리를 사용하여 RabbitMQ와 연결을 생성하고 채널을 생성합니다. assertQueue()로 큐를 생성하거나 확인하고, consume()로 메시지를 수신하고, sendToQueue()로 메시지를 송신합니다.

 

Kafka 통합

Kafka는 분산 스트리밍 플랫폼으로, 대규모 데이터 처리에 적합한 메시징 시스템입니다. Node.js에서 Kafka와 통합하기 위해 kafka-node 라이브러리를 사용할 수 있습니다. 이 라이브러리를 사용하면 Kafka와의 연결, 프로듀서와 컨슈머 생성, 메시지 송수신 등을 처리할 수 있습니다.

다음은 Kafka와 Node.js를 통합하여 메시지를 송수신하는 예제 코드입니다

const kafka = require('kafka-node');

// Kafka 클라이언트 생성
const client = new kafka.KafkaClient({ kafkaHost: 'localhost:9092' });
const producer = new kafka.Producer(client);

// 메시지 송신
const topic = 'my_topic';
const message = { key: 'my_key', value: 'Hello, Kafka!' };
producer.send([{ topic, messages: [JSON.stringify(message)] }], (error, data) => {
  if (error) {
    console.error('메시지 송신 오류:', error);
  } else {
    console.log('메시지 전송 완료:', data);
  }
});

// 메시지 수신
const consumer = new kafka.Consumer(client, [{ topic }]);
consumer.on('message', message => {
  console.log('수신한 메시지:', message);
});

 

위의 예제에서는 kafka-node 라이브러리를 사용하여 Kafka 클라이언트와 프로듀서, 컨슈머를 생성합니다. Producer로 메시지를 송신하고, Consumer로 메시지를 수신합니다.

위의 예제 코드를 참고하여 Node.js와 RabbitMQ, Kafka를 통합해보세요. 실제 환경에서는 연결 및 오류 처리, 메시지 처리 로직 등을 보다 신중하게 구현해야 합니다. 이를 통해 안정적이고 확장 가능한 메시징 시스템과 Node.js를 효과적으로 통합할 수 있습니다.