有没有办法在zeromq中返回任何未发送的消息?

时间:2015-04-20 20:04:55

标签: c# zeromq

我目前有一个系统,其中应用程序相互ping通以检查它们是否还活着。我有1个客户端,它发送请求,1个路由器分配它们,2个工作人员完成工作并返回结果。

如果工作人员死亡,路由器会将其解决,只发送给另一个。这让我有时间看错了什么,并采取相应的行动。如果路由器死了,那么客户端就知道了。然而,我想知道的是,如果我的客户端计算出路由器已经死亡(它可以做到),那么它会将任何消息排队并简单地将它们发送回去。

这是一个聊天应用,所以有人会发送消息,这将转到客户经销商端口。经销商会突然发现路由器死了!"然后发回消息并显示错误,表示系统当前已关闭。这样一来,如果遇到灾难,用户就会知道系统已经关闭并停止发送消息,直到它恢复为止。

有办法做到这一点吗?我是否正确地说高水位标记在内部知道当前还没有发送多少消息,也许我可以使用一些函数将所有排队的消息从零mq恢复?

非常感谢

2 个答案:

答案 0 :(得分:1)

不,你必须在你的应用程序中处理它。您需要保留邮件的副本,如果ZMQ呕吐并且无法发送,您可以在应用程序中妥善管理。一旦你确定它已经通过,那么你可以丢弃它。

答案 1 :(得分:0)

对于那些有类似想法的人,我发现最好的解决方案实际上是在客户端添加超时。在用户浏览器上缓存最后的数据请求,如果在合适的时间范围内没有回复,则提交错误报告。

如果做不到这一点,我能找到的唯一其他选择是自己处理缓存或使用不同的消息传递平台(rabbitmq,activemq)。仅仅记忆要求让我感到困扰,无论如何都要亲自考虑这些。