2013-10-21 26 views
0

嗨,我使用zeroMQ爲其中i用於郵件queuing.Below發佈者和訂閱我的節點應用是我的代碼出版商和用戶的負面情況下不工作

Publisher.js

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

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

setTimeout(function() { 
    console.log('sent'); 
    publisher.send("hi") 
}, 1000) 

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

Subscriber.js

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

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

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

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

上面的代碼工作正常,如果發佈商和訂閱者都在運行。如果我阻止了我的訂閱者,當訂閱者離線時我無法收到發佈者的數據。即使訂閱者宕機,我也要保留這些數據。我卡在這裏了。任何幫助將不勝感激。

+0

如果訂閱者處於脫機狀態,發佈者將不會緩存消息。如果您希望發件人在沒有客戶端時將郵件保存在內存中,請使用PUSH。 – raffian

+0

@raffian:雅會嘗試。 – user2882721

回答

0

請參閱zmq文檔站點上的'Last value caching'模式。你可以擴展這個例子,客戶端首先使用它接收到的最新條目訂閱一個模式,然後用lvc代理重新發送缺失值(它必須先緩存它們)。但是,這可能適用於少數緩存項目,其中很少會發生斷開連接,否則PUSH可能是更好的選擇。 PUB-SUB不打算支持緩衝。

相關問題