Publisher code
int main()
{
zmq::context_t ctx(0);
zmq::socket_t publisher(ctx, zmq::socket_type::pub);
publisher.bind("inproc://#1");
// Give the subscribers a chance to connect, so they don't lose any messages
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << "Publisher Started Publishing messages";
while (true)
{
// Write three messages, each with an envelope and content
publisher.send(zmq::str_buffer("A"), zmq::send_flags::sndmore);
publisher.send(zmq::str_buffer("Message in A envelope"));
publisher.send(zmq::str_buffer("B"), zmq::send_flags::sndmore);
publisher.send(zmq::str_buffer("Message in B envelope"));
publisher.send(zmq::str_buffer("C"), zmq::send_flags::sndmore);
publisher.send(zmq::str_buffer("Message in C envelope"));
std::this_thread::sleep_for(std::chrono::seconds(10));
}
}
Subscriber code
int main() {
zmq::context_t ctx(0);
zmq::socket_t subscriber(ctx, zmq::socket_type::sub);
subscriber.connect("inproc://#1");
// Thread3 opens ALL envelopes
subscriber.set(zmq::sockopt::subscribe, "A");
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
while (1) {
// Receive all parts of the message
std::vector<zmq::message_t> recv_msgs; std::cout << "Connected to Publisher";
zmq::recv_result_t result =
zmq::recv_multipart(subscriber, std::back_inserter(recv_msgs));
assert(result && "recv failed");
assert(*result == 2);
std::cout << "Thread3: [" << recv_msgs[0].to_string() << "] "
<< recv_msgs[1].to_string() << std::endl;
}
}
I trying to apply zeromq pub-sub pattern created both publisher and subscriber in c++. The message published by publisher is not getting received by the subscriber.