我正在研究ZeroMQ中的消息传递保证,如果它可以确保一次精确的消息传递。
[经典方法是将消息号和客户端ID保留在接收节点,并且每次将收到的消息与日志进行比较,以检查是否已接收到消息。
在ZeroMQ(0MQ)指南的第4章中:
“要处理非幂等操作,请使用检测和拒绝重复请求的相当标准的解决方案。这意味着:
我想知道日志的类型ZeroMQ将消息和客户端ID保存到其中(向量,映射,数组...),以及每个客户端保持状态的时间(ID,消息..)。 。
是否有超时删除客户信息?删除特定客户端的信息后,如果收到旧的重复消息该怎么办?
欢迎使用零之禅。
如果从未使用过ZeroMQ,可以在深入了解更多细节之前先看看"ZeroMQ Principles in less than Five Seconds"。
Q
:“是否存在删除客户端信息的超时?”不,没有这样的超时可以从文档化的API访问到用户端应用程序。
Q
:“删除特定客户端的信息后,如果收到旧的重复消息该怎么办?”在
{ .bind() : .connect() }
关系的存在期内,在合法合作的交易对手之间进行设置,只有一项保证-任何类型的消息要么以原始1:1二进制副本的形式传递,要么根本不传递(目的是保留任何类型的消息,无论是大的,小的,多帧的还是空的消息,都是一种原子的(不可分割的)实体)。
ZeroMQ过去一直是无代理消息传递,其中不记录整个基础架构中消息流的状态,通过(不存在)代理及其服务进行的重构较少。
ZeroMQ的操作原理已在已发布的ZMTP / RFC文档中详细记录,该文档定义了任何第三方的最小功能范围,从而成为符合ZeroMQ的合作对等方。然而,大多数ZMTP / RFC记录的要求是在ZeroMQ或3rd-Pty-ZeroMQ仿真节点内部实现的,并且无法通过已发布的API接口访问到用户端应用程序。
ZeroMQ内部设计始终可以在源代码存储库中访问。