【发布时间】:2019-11-17 13:35:46
【问题描述】:
我正在研究 ZeroMQ 中的消息传递保证,如果它确保只发送一次消息。
经典的方法是在接收节点保留消息号和客户端ID,每次收到消息都要与日志进行比较,检查是否已经收到消息。
在 ZeroMQ (0MQ) 指南第 4 章中:
“要处理非幂等操作,请使用相当标准的检测和拒绝重复请求的解决方案。这意味着:
- 客户端必须用唯一的客户端标识符和唯一的消息编号标记每个请求。
- 服务器在发回回复之前,使用客户端 ID 和消息号的组合作为密钥来存储它。
- 服务器在收到来自给定客户端的请求时,首先检查它是否有针对该客户端 ID 和消息号的回复。如果是,它不会处理请求,而只是重新发送回复。”
我想知道 ZeroMQ 将消息和客户端 ID 保存到其中的日志类型(向量、映射、数组...),以及它为每个客户端保留状态的时间(ID、消息... )。
删除客户端信息是否超时? 删除特定客户端的信息后,如果收到旧的重复消息怎么办?
【问题讨论】:
标签: logging duplicates zeromq messaging reliability