我有一個ZeroMQ ROUTER
/DEALER
一對形式通信原型,用於兩臺計算機之間的異步通信。如何配置ZeroMQ ROUTER套接字以繼續嘗試長時間發送包?
如果與DEALER
插座計算機進入離線了一會兒,回來的時候,一些消息都將丟失。
我也明白,ZeroMQ不能無限期持有的消息,因爲沒有保證DEALER
側的是還會回來。我正在尋找方法來配置這種行爲 - 有沒有一種設置可以用來控制消息在放棄之前保存多久?
什麼設置可能會影響此行爲?
我不認爲這個問題是關係到高水位設置的值,所傳送的數據量是相當低的。
Windows上的ZeroMQ版本4.0.4。
我不知道究竟是什麼將是代碼顯示的相關部分。而且,將事情擺脫背景並使其易於理解並不是完全直截了當的。我會嘗試,所以在這裏。
這是路由器插座如何初始化:
router-socket (doto (zmq/socket zmq-context :router)
(zmq/set-receive-timeout 100)
(zmq/set-recv-hwm 0)
(zmq/set-send-hwm 0)
(zmq/bind (str "tcp://*:" (:port request-handler))))
發送郵件使用ZMQ /發送功能。
即使沒有Clojure的經驗zeromq部分應該是清楚的。
這裏的經銷商如何初始化(C#):
var dealer = context.CreateSocket(SocketType.DEALER);
dealer.SendHighWatermark = 0;
dealer.ReceiveHighWatermark = 0;
的信息的接收使用ZmqSocket.ReceiveMessage方法(當然,實際上這是在SendReceiveExtensions類的擴展方法,但無論如何)。
一個(可能是主),其中包損失發生時運行經銷商計算機進入睡眠狀態(=膝上型蓋關閉),並且之後喚醒一些分鐘的情況。就像我在我原來的問題中所說的那樣,我認爲由於路由器暫時放棄返回的經銷商並因此丟棄消息而丟失了包裹。但這只是一個假設,原因也可能是別的。
感謝您的全面回答! 我添加了代碼示例和一些問題的進一步說明。 我還沒有嘗試過您所描述的設置。我會在下面對他們發表評論。 –
ZMQ_RECONNECT_IVL - 如果我理解正確,這會影響zeromq在可以重新建立後多快恢復連接。目前這不是問題 - 重新連接很快就會發生。然而,一旦這樣做,運行經銷商的代碼會發現一些消息丟失(它們被編號以便能夠注意到這種情況)。 –
ZMQ_TCP_MAXRT - 來自http://api.zeromq.org/4-2:zmq-setsockopt:「網絡中斷後,可能需要很長時間才能重新建立會話。設置此選項允許超時發生在一個較短的時間間隔。「 我對文檔進行了解釋,這也影響了會話重新建立的時間。它似乎不被認爲會影響消息的丟失。 –