【问题标题】:Handling transactions/data lost in ZeroMQ?处理 ZeroMQ 中丢失的事务/数据?
【发布时间】:2014-03-28 16:30:21
【问题描述】:

我无法通过查看常见问题解答和文档来判断。如果停电会怎样? zeromq 会忘记一切吗?所有消息都作为事务存储在硬盘上吗?可以说我有一个带有源代码的网站。假设有 5 个人点击了 5 个不同大型项目的下载 zip,我需要一些时间来压缩它。假设我将它们转发到一个页面,说我们会在准备好后通过电子邮件发送给您。此时会出现电涌,机器会重新启动。

如何恢复和处理这些消息?在我的脑海中,我认为 1) 我必须发送消息 2) ZeroMQ 必须以某种方式存储它 3) 客户端必须接收消息并将其标记为待处理 4) 另一个客户端应该接收不同的消息来处理 5) 客户端要么完成发送数据/回复或死亡,而 zeromq 将待处理更改为未处理。

如何处理不应丢失的数据?我不认为我应该将它存储在 ACID db 中?

【问题讨论】:

    标签: zeromq


    【解决方案1】:

    ZeroMQ 不会将消息持久化到存储设备,部分原因是效率非常低,因此您必须自己处理。

    如果下游连接中断(断电、网络故障等),ZeroMQ 将缓冲数据,直到连接恢复。但是,缓冲区空间是有限的,并且根据您的吞吐量,可能根本不够用。我工作的公司需要解决这个问题,所以我们使用了内存映射文件来缓冲数据,效果很好。

    避免任何类型的数据丢失的最佳选择可能是采取与我们所做的类似的方法。使用请求/回复是确保下游收到已发送消息的最佳方式。

    如果数据丢失是关键任务,那么有许多 UPS 解决方案可以帮助缓解断电,只要程序和内存保持活跃,ZeroMQ 通常非常擅长处理错误情况。

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2015-05-31
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多