[RabbitMQ] 1장. RabbitMQ 소개

RabbitMQ 매뉴얼

목차

  1. RabbitMQ 소개
  2. Work Queue 활용
  3. Pub/sub 기능 활용
  4. Routing 활용
  5. Topic 활용

작성일 : 2018.09.11


1. RabbitMQ 소개

RabbitMQ의 정의


동작 방법 이해하기

공식 이미지


Sending

sending

  1. 해당 라이브러리를 import하고,
  2. RabbitMQ 서버에 연결한 뒤에,
  3. 대부분의 API가 존재하는 채널을 생성한다 (?)
  4. 해당 채널 내에 큐를 정의한다. 이 큐 내에 메시지를 publish 할 수 있다.
    • 큐는 이미 존재하지 않을 때에만 생성된다.
    • 메시지 내용은 bite array이므로 아무거나 인코딩해서 집어넣을 수 있다.
  5. 작업이 끝나면 커넥션을 끊고 나간다.
#!/usr/bin/env node

var amqp = require('amqplib/callback_api');

// 1. RabbitMQ 서버에 연결한다.
amqp.connect('amqp://localhost', function(err, conn) {
  // 2. 채널을 생성한다.
  conn.createChannel(function(err, ch) {

    // 3. 큐를 생성한다.
    var q = 'hello';

    // 보낼 메시지의 내용
    var msg = 'Hello World!';

    ch.assertQueue(q, {durable: false});

    // 4. 큐에 해당 메시지를 넣는다.
    ch.sendToQueue(q, Buffer.from(msg));
    console.log(" [x] Sent %s", msg);
  });
  setTimeout(function() { conn.close(); process.exit(0) }, 500);
});

Receiving

receiving

  1. sending과는 다르게, 메시지가 생성되는 것을 기다리며 listen 상태로 있어야 한다.
  2. sending 과정과 비슷하지만, 큐에서 메시지를 꺼내기 전에 큐가 존재하는 걸 꼭 확인해야 한다.
  3. 해당 채널과 큐를 할당해서, consume() 함수로 받은 메시지를 처리할 수 있도록 한다.
    • 비동기식으로 메시지를 전달하므로, RabbitMQconsumer에게 메시지를 전달할 때 실행할 콜백 함수가 필요하다.
#!/usr/bin/env node

var amqp = require('amqplib/callback_api');

// 1. RabbitMQ 서버에 연결한다.
amqp.connect('amqp://localhost', function(err, conn) {
  // 2. 채널을 생성한다.
  conn.createChannel(function(err, ch) {
    // 3. 큐를 생성하고 채널에 등록한다.
    var q = 'hello';

    ch.assertQueue(q, {durable: false});
    console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);

    // 4. 큐에 메시지가 들어오는 것을 기다린다.
    ch.consume(q, function(msg) {
      console.log(" [x] Received %s", msg.content.toString());
    }, {noAck: true});
  });
});

참고 문헌

RabbitMQ 공식 홈페이지의 튜토리얼을 번역하며 공부한 내용입니다.