我最近了解到,连接到另一个套接字的 ZeroMQ 套接字(我正在使用 PUSH/PULL)会继续推送数据,即使拉取数据的套接字脱机或断开连接也是如此。
我的理解是一切都在内存中累积,一旦套接字再次在线,它就会从停止的地方继续拉动。
有什么方法可以设置 ZeroMQ 使用文件存储而不是内存来实现这种行为?如果是这样,它是否是事件驱动的,告诉套接字何时意识到 Puller 的重新连接断开?
我喜欢这个概念,但我害怕过度使用内存,我也不想使用可能阻塞套接字的水印。
我在 C/C++ 下使用 ZeroMQ for Linux。
最佳答案
我相信没有这样的内置功能。如果你想将消息存储到一个文件中,你将不得不自己实现它。
根据经验(我相当广泛地使用 ZMQ)我会说你的解决方案更复杂而且没有必要。 如果您真的觉得 RAM 会成为问题,更好的解决方案是创建一个 SWAP 文件并使用 cgroups 限制进程对 RAM 的使用。 (example)。 结果将是您的进程将使用您允许的任何最大 RAM,然后使用 SWAP RAM(基本上是一个文件)来存储排队的消息。
关于c++ - 关于 ZeroMQ 和使用替代存储来存储消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49795764/