[c++] ZeroMQ 팬아웃-팬인 패턴
ZeroMQ은 메시징 패턴을 구현하기 위한 강력한 도구로 여겨집니다. 그 중 하나는 팬아웃-팬인 패턴입니다. 이 패턴은 메시지를 받아서 여러 개의 작업자에게 전달하는 팬아웃 부분과 다시 작업자로부터의 응답을 받아서 병합하는 팬인 부분으로 구성됩니다.
팬아웃 부분 구현
팬아웃 부분은 ZMQ_PUSH
와 ZMQ_ROUTER
를 사용하여 구현됩니다. 팬아웃 송신자는 ZMQ_PUSH
소켓을 사용하여 메시지를 여러 개의 작업자에게 전달합니다.
// 송신자
void sendMessageToWorkers() {
zmq::context_t context(1);
zmq::socket_t sender(context, ZMQ_PUSH);
sender.bind("tcp://*:5557");
// 메시지 전송
zmq::message_t message(5);
memcpy(message.data(), "Hello", 5);
sender.send(message);
}
팬인 부분 구현
팬인 부분은 ZMQ_PULL
과 ZMQ_DEALER
를 사용하여 구현됩니다. 팬인 수신자는 ZMQ_PULL
소켓을 사용하여 메시지를 여러 개의 작업자로부터 받습니다.
// 수신자
void receiveMessageFromWorkers() {
zmq::context_t context(1);
zmq::socket_t receiver(context, ZMQ_PULL);
receiver.connect("tcp://localhost:5557");
while (true) {
zmq::message_t message;
receiver.recv(&message);
// 메시지 처리
}
}
예시
팬아웃-팬인 패턴은 여러 작업자에게 작업을 분산시키고, 그 결과를 모아서 조합해야 하는 경우에 유용하게 사용될 수 있습니다. 이를테면, 데이터를 병렬로 처리하고 그 결과를 종합하는 등의 경우에 활용할 수 있습니다.
참고문헌:
- ZeroMQ Guide: http://zguide.zeromq.org/page:all