如何配置ZeroMQ ROUTER套接字以继续尝试长时间发送包?

时间:2017-12-27 16:46:08

标签: zeromq

我有一个ZeroMQ ROUTER / DEALER 一对正式通信原型,用于两台计算机之间的异步通信。

如果带有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 / send函数。

即使没有clojure经验,zeromq部分也应该清晰。

以下是经销商的初始化方式(C#):

var dealer = context.CreateSocket( SocketType.DEALER );
dealer.SendHighWatermark = 0;
dealer.ReceiveHighWatermark = 0;    

接收消息使用ZmqSocket.ReceiveMessage方法(实际上它是SendReceiveExtensions类中的扩展方法,但无论如何)。

发生包装丢失的一个(可能是主要的)情况是运行经销商的计算机进入睡眠状态(=笔记本电脑盖关闭)并在几分钟后被唤醒。就像我在原始问题中所说的那样,我假设由于路由器暂时放弃经销商回来因此丢弃消息而丢失了包裹。但这只是一个假设,原因可能也是其他原因。

0 个答案:

没有答案