[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를 활용하여 더 복잡한 메시지 큐를 구현할 수 있습니다.
참고 자료
- ZeroMQ 공식 웹사이트: ZeroMQ
- ZeroMQ 가이드북: “ZeroMQ - The Guide” dostro.org/zmq-guide/