【问题标题】:For how much time ZeroMQ (0MQ) server keeps state information of a client sending messges?ZeroMQ (0MQ) 服务器将客户端发送消息的状态信息保留多长时间?
【发布时间】:2019-11-17 13:35:46
【问题描述】:

我正在研究 ZeroMQ 中的消息传递保证,如果它确保只发送一次消息。

经典的方法是在接收节点保留消息号和客户端ID,每次收到消息都要与日志进行比较,检查是否已经收到消息。

在 ZeroMQ (0MQ) 指南第 4 章中:

“要处理非幂等操作,请使用相当标准的检测和拒绝重复请求的解决方案。这意味着:

  • 客户端必须用唯一的客户端标识符和唯一的消息编号标记每个请求。
  • 服务器在发回回复之前,使用客户端 ID 和消息号的组合作为密钥来存储它。
  • 服务器在收到来自给定客户端的请求时,首先检查它是否有针对该客户端 ID 和消息号的回复。如果是,它不会处理请求,而只是重新发送回复。”

我想知道 ZeroMQ 将消息和客户端 ID 保存到其中的日志类型(向量、映射、数组...),以及它为每个客户端保留状态的时间(ID、消息... )。

删除客户端信息是否超时? 删除特定客户端的信息后,如果收到旧的重复消息怎么办?

【问题讨论】:

    标签: logging duplicates zeromq messaging reliability


    【解决方案1】:

    欢迎来到零之禅。

    如果您从未使用过 ZeroMQ,
    您可以在这里先看看"ZeroMQ Principles in less than Five Seconds"
    在深入了解更多细节之前


    “删除客户端信息是否超时?”

    不,没有这样的超时可以从记录的 API 访问到用户端应用程序。

    Q“删除特定客户端的信息后,如果收到旧的重复消息怎么办?”

    { .bind() : .connect() }-relation 的生命周期内,在合法合作的交易对手之间设置,只有一个保证 - 任何类型的消息要么作为原始的 1:1 二进制副本传递,要么不以全部(目的是保留任何类型的消息,巨大的、小型的、多帧的,甚至是空的,一种原子(不可分割)实体)。

    ZeroMQ 一直是无代理的消息传递,其中不记录整个基础设施的消息流状态,通过(不存在的)代理及其服务进行的重建更少。

    ZeroMQ 的操作原则在已发布的 ZMTP/RFC 文档中有详细记录,这些文档定义了任何第 3 方的最小功能范围,以便成为符合 ZeroMQ 的合作伙伴。然而,大多数 ZMTP/RFC 文档化的需求是在 ZeroMQ 或 3rd-Pty-ZeroMQ 模拟节点“内部”实现的,并且无法通过已发布的 API 接口访问用户端应用程序。

    ZeroMQ 内部设计始终可以在源代码存储库中访问。

    【讨论】:

    • 感谢您的回答。假设 ZeroMQ 推/拉;正如我从您的回答中了解到的那样,仅在两个节点之间的连接期间有一个日志,并且随着 0MQ 连接中断,将不会有日志,因为任何接收消息都将被丢弃,因为它没有连接。因此,如果 0MQ 连接中断,可能会丢失一些消息?甚至重复!
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 2014-05-12
    • 2017-01-12
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多