有没有办法 return zeromq 中任何未发送的消息?

Is there a way to return any unsent messages in zeromq?

我目前有一个系统,其中的应用程序相互 ping 以检查它们是否仍然存在。我有 1 个发送请求的客户端,1 个分发请求的路由器和 2 个负责工作并 return 结果的工作人员。

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

这是一个聊天应用程序,所以有人会发送一条消息,这将转到客户端经销商端口。经销商会突然 "waaah the router's dead!" 并发回一条错误消息,说明系统当前已关闭。这样,如果发生灾难,用户将知道系统已关闭并停止发送消息,直到它恢复正常。

有办法吗?我说的对吗,高水位线在内部知道当前有多少消息尚未发送,也许我可以使用一些函数让所有排队的消息从零 mq 退回?

非常感谢

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

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

否则,我能找到的唯一其他选择是自己处理缓存或使用不同的消息传递平台(rabbitmq、activemq)。单是内存要求就让我很困扰,无法考虑这些。