ZMQ阻止发送" timedout"消息

时间:2014-08-19 18:32:08

标签: node.js zeromq

我想知道如何在一段时间内没有发送消息后“中止”消息。

场景很简单: 1)客户端连接到服务器 2)服务器出现故障 3)客户端发送消息,这里没有问题,因为Zmq在本地对消息进行排队(因此“发送”操作成功) 4)假设我已设置RCVTIMEO我得到超时 5)在我超时之后我不再希望发送消息,但是一旦服务器再次上升,Zmq将发送消息。我该怎样预防呢?

我想要防止这种情况的原因是因为一旦我收到超时,我就会以失败消息回复给我的客户(例如“由于超时而无法处理请求”),这最终会成为一个真正的问题他的请求将被传输和处理......

希望我的问题很明确......谢谢!

1 个答案:

答案 0 :(得分:0)

第1步)设置 aClientSOCKET 实例 ZMQ_LINGER 参数,不要花任何时间重新发送任何内容在即将到来的套接字拆解操作期间排队的消息(这与现代高性能/低延迟分布式消息传递系统设计完全一致 - 出了问题,经常出错,所以用这个来解决这个问题事实上,而不是失去与不可避免的斗争的时间...)

第2步)强制 .close() 放弃套接字

第3步)如果需要,重新启动另一个套接字/通信方式或使用另一个先验准备的方法(类似于二进制星形故障恢复阴影)在{“primary”|的情况之后解决预期的应用程序处理“观察”} - 连接 - 同伴握手超时。