zeromq推挽保证交付(出错时重新发送)

时间:2014-01-06 10:57:26

标签: javascript node.js zeromq

如何让PULL无法从推送器转发?

在下面的示例中,如果我取消注释// throw ...以在每个收到的消息上触发异常,则所有PULL消息都会失败,但是当我放回注释时,所有这些消息都会丢失而不会重新传输推动者。

如果PULL方法失败,如何确保推送器重新传输消息?

P.S。以下代码是在nodejs之上的Meteor框架中的JavaScript,但它与问题无关,因为我认为它在每个zmq实现中都是类似的。

var zmq = Npm.require(modulePath + '/zmq');
var sock = zmq.socket('pull');
sock.identity = 'receiving' + process.pid;
sock.bind('tcp://172.17.4.25:5551', function(err) {
    if (err) throw err
    if (debug) console.log('Listening for ZMQ messages')
});

sock.on('message', Meteor.bindEnvironment(function(data) {
    // throw { name: 'MessagePullFailed', message: 'Failing Pull message to check if ZMQ can recover from it' }
    var jsondata = JSON.parse(data)
    if (jsondata.cmd == 'upsert') {
        jsondata['set']['utctime'] = new Date(jsondata['set']['utctime'])
        Mon.upsert({_id: jsondata._id}, {'$set': jsondata['set']}, function(err) {
            if (err) console.log(err)
        })
    }
}))

0 个答案:

没有答案