0

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.

Öö Tiib
  • 10,809
  • 25
  • 44
Ninja
  • 1
  • 2
  • 2
    _"...As the name implies, inproc sockets can only be used within the same process. ..."_ https://stackoverflow.com/questions/48584598/how-to-use-inproc-transport-with-pyzmq and as the above code has 2 `main`s you will have 2 processes. See also http://api.zeromq.org/2-1:zmq-inproc – Richard Critten Nov 01 '22 at 09:16

0 Answers0