[c++] ZeroMQ 메시지 큐

ZeroMQ는 경량 및 고성능 메시징 라이브러리로, 여러 프로토콜을 지원하며 다양한 언어로 쉽게 사용할 수 있습니다. 이 라이브러리를 통해 메시지 큐를 만들어 보겠습니다.

ZeroMQ 라이브러리 설치

먼저 ZeroMQ 라이브러리를 설치해야 합니다. C++에서는 다음과 같이 설치할 수 있습니다.

sudo apt-get install libzmq3-dev

ZeroMQ 메시지 큐 만들기

간단한 Publisher-Subscriber 형식의 메시지 큐를 만들어 보겠습니다. 우선 Publisher 클래스를 구현해 보겠습니다.

#include <zmq.hpp>
#include <string>
#include <iostream>

int main() {
    zmq::context_t context(1);
    zmq::socket_t publisher(context, ZMQ_PUB);
    publisher.bind("tcp://*:5556");

    while (true) {
        std::string message = "Hello, World!";
        publisher.send(zmq::message_t(message.begin(), message.end()), zmq::send_flags::none);
        std::cout << "Sent: " << message << std::endl;
    }

    return 0;
}

위 코드는 ZeroMQ의 PUB 소켓을 사용하여 메시지를 발행하는 Publisher를 구현한 것입니다. 이제 Subscriber를 구현해 보도록 하겠습니다.

#include <zmq.hpp>
#include <string>
#include <iostream>

int main() {
    zmq::context_t context(1);
    zmq::socket_t subscriber(context, ZMQ_SUB);
    subscriber.connect("tcp://localhost:5556");
    subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);

    while (true) {
        zmq::message_t update;
        subscriber.recv(update, zmq::recv_flags::none);
        std::string message = std::string(static_cast<char*>(update.data()), update.size());
        std::cout << "Received: " << message << std::endl;
    }

    return 0;
}

위 코드는 ZeroMQ의 SUB 소켓을 사용하여 발행된 메시지를 구독하는 Subscriber를 구현한 것입니다. 이제 Publisher와 Subscriber를 실행해 보면 메시지 큐가 동작하는 것을 확인할 수 있습니다.

ZeroMQ를 사용하여 간단한 메시지 큐를 구현해 보았습니다. 이 외에도 다양한 패턴과 기능을 지원하는 ZeroMQ를 활용하여 더 복잡한 메시지 큐를 구현할 수 있습니다.

참고 자료