ZeroMQ para C++: mensagens de alto desempenho
1. O que é e para que serve
ZeroMQ (também conhecida como ØMQ, 0MQ ou zmq) é uma biblioteca assíncrona de troca de mensagens de alto desempenho, projetada para aplicações distribuídas e paralelas. Diferente de brokers de mensagens tradicionais (como RabbitMQ ou Kafka), o ZeroMQ não possui um servidor central. Em vez disso, ele fornece sockets que podem se conectar diretamente entre si, formando topologias arbitrárias (estrela, barramento, cluster, etc.). A biblioteca implementa vários padrões de troca: "requisição-resposta" (REQ/REP), "publicador-assinante" (PUB/SUB), "pipe" (PUSH/PULL) e outros.
Para que serve o ZeroMQ? No mundo moderno, o software raramente funciona isoladamente. Microsserviços, computação distribuída, sistemas em tempo real, chats, plataformas de trading financeiro — todos exigem troca rápida e confiável de dados entre componentes. O ZeroMQ resolve esse problema "de fábrica": ele gerencia toda a complexidade das conexões de rede, buffer, tentativas de reenvio e fragmentação de mensagens. O desenvolvedor só precisa escolher o padrão de troca adequado e chamar algumas funções.
Principais vantagens do ZeroMQ: velocidade impressionante (a biblioteca é escrita em C++ e usa algoritmos eficientes), consumo mínimo de memória, suporte a várias linguagens (incluindo C++, Python, Java, C#, Go e outras), além de suporte nativo a criptografia (via extensão CurveZMQ) e dispositivos proxy.
2. Instalação
Para C++, não existe um gerenciador de pacotes único como o pip do Python. No entanto, o ZeroMQ pode ser instalado de várias formas:
Método 1: Gerenciador de pacotes do sistema (Linux/macOS)
# Ubuntu/Debian
sudo apt-get install libzmq3-dev
# Fedora/RHEL
sudo dnf install zeromq-devel
# macOS (Homebrew)
brew install zeromq
Método 2: Compilação a partir do código-fonte
Baixe a versão mais recente do GitHub e compile:
git clone https://github.com/zeromq/libzmq.git
cd libzmq
mkdir build && cd build
cmake ..
make -j4
sudo make install
Método 3: vcpkg (Windows/Linux/macOS)
vcpkg install zeromq
Após a instalação, lembre-se de incluir o arquivo de cabeçalho zmq.hpp (wrapper C++) e fazer a linkagem com a biblioteca libzmq (ou zmq.lib no Windows).
3. Início rápido — exemplo mínimo funcional
O exemplo mais simples é um par "servidor-cliente" usando o padrão REQ/REP. O cliente envia "Hello", o servidor responde "World".
Servidor (server.cpp)
#include <zmq.hpp>
#include <string>
#include <iostream>
int main() {
// Cria um contexto (um por processo)
zmq::context_t context(1);
// Cria um socket do tipo REP (respondedor)
zmq::socket_t socket(context, zmq::socket_type::rep);
socket.bind("tcp://*:5555");
while (true) {
zmq::message_t request;
// Aguarda requisição do cliente
socket.recv(request, zmq::recv_flags::none);
std::string msg(static_cast<char*>(request.data()), request.size());
std::cout << "Recebido: " << msg << std::endl;
// Envia resposta
zmq::message_t reply(5);
memcpy(reply.data(), "World", 5);
socket.send(reply, zmq::send_flags::none);
}
return 0;
}
Cliente (client.cpp)
#include <zmq.hpp>
#include Também na biblioteca
Registro para JavaScript (Node.js): melhores soluções
Migrações de banco de dados em Swift: ferramentas e abordagens para iOS/macOS
Event Bus e padrão Observer em Kotlin: guia com exemplos
SDK OpenAI para JavaScript (Node.js): guia completo com exemplos