user2882721
user2882721

Reputation: 231

zmq nodejs module push pull not working properly.Subscriber not receiving messages properly

I have a zmq publisher and subscriber code in nodejs.My issue is that at times my subscriber does not receive any messages.Below is my code

publisher:

var zmq = require('zmq'),

socket = zmq.socket('push'),
socket.bind(publisherUrl, function (err) {
if (err) {
    console.log(err);
}
else {
    console.log("Listening on ..." + publisherUrl)
}

});

function PublishEvent(msg) {
setTimeout(function () {
    socket.send(msg);
}, 100);

}

subscriber:

var zmq = require('zmq'),
events = require('events'),
subscriber = zmq.socket('pull');

subscriber.on("message", function (reply) {
if (reply.toString() !== '{}'){
console.log("info", 'Received message:' + reply.toString());
}
})
subscriber.connect(publisherUrl)

Its working fine sometimes but fails to receive messages at some cases. I'm stuck here any help regarding this will be much helpful.

Upvotes: 0

Views: 1266

Answers (1)

Blairg23
Blairg23

Reputation: 12065

Your publisher should look like this:

var zmq = require('zmq')
var publisher = zmq.socket('pub')

publisher.bind('tcp://*:8688', function(err) {
    if(err)
        console.log(err)
    else
        console.log("Listening on 8688...")
})

for (var i=1 ; i<10 ; i++)
    setTimeout(function() {
        console.log('sent');
        publisher.send("Hello there!")
}, 1000 * i)

process.on('SIGINT', function() {
    publisher.close()
    console.log('\nClosed')
})

and your subscriber should look like this:

var zmq = require('zmq')
var subscriber = zmq.socket('sub')

subscriber.on("message", function(reply) {
    console.log('Received message: ', reply.toString());
})

subscriber.connect("tcp://localhost:8688")
subscriber.subscribe("")

process.on('SIGINT', function() {
    subscriber.close()
    console.log('\nClosed')
})

source: https://github.com/imatix/zguide/tree/master/examples/Node.js

Upvotes: 2

Related Questions