[c++] ZeroMQ 팬아웃-팬인 패턴

ZeroMQ은 메시징 패턴을 구현하기 위한 강력한 도구로 여겨집니다. 그 중 하나는 팬아웃-팬인 패턴입니다. 이 패턴은 메시지를 받아서 여러 개의 작업자에게 전달하는 팬아웃 부분과 다시 작업자로부터의 응답을 받아서 병합하는 팬인 부분으로 구성됩니다.

팬아웃 부분 구현

팬아웃 부분은 ZMQ_PUSHZMQ_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_PULLZMQ_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);

        // 메시지 처리
    }
}

예시

팬아웃-팬인 패턴은 여러 작업자에게 작업을 분산시키고, 그 결과를 모아서 조합해야 하는 경우에 유용하게 사용될 수 있습니다. 이를테면, 데이터를 병렬로 처리하고 그 결과를 종합하는 등의 경우에 활용할 수 있습니다.

참고문헌: