是否可以使用 ZeroMQ(使用 JeroMQ Java 移植)实现带队列的无代理网络?
在我的网络中,所有对等点都是发布者和接收者(SUB/PUB模式),因此当对等点发送消息时,所有其他对等点都会收到消息。
问题是消息不可靠并且可能会丢失(例如连接问题)并且不再恢复。
我想实现一个队列,对等方可以检索他们未收到的消息。
我正在查看本指南(即使它是针对 Python 的),看来我应该实现XREP/XREQ模式:
但似乎这只能实现队列服务器。这是真的吗?
可能是我没有完全理解你的观点,但是在基于 ZeroMQ 的分布式系统中花了几年时间,我可以解决这个概念中的一些遗漏。
首先:
是的,Zen-of-Zero 确实为相应的消息传递提供了零保修。这可能看起来令人惊讶,但是以这种方式工作有很多原因,没有其他原因。有一致性保证——即消息要么按原样传递,要么根本不传递。这意味着,如果消息已经通过套接字,接收方可能会确定,发送方正在分派这个内容,并且不需要进行错误检查,因为 ZeroMQ 已经花费了所有的精力来传递原件的 1:1 逐位副本。
下一篇:
ZeroMQ 被设计为一个无代理的异步轻量级信令/消息传递工具。Brokerless 这个词的意思是,任何类型的基于工具的持久性都需要零努力,因此实际上不需要任何 Broker 端存储消息的任何(半)持久性副本,是由于任何技术原因已交付或未交付的那些(然而,交付的那些 - 如上所述 - 保证是好的并且是原件的精确副本)。
含义:
这意味着,设计 a 的影响为零,zmq.device( zmq.Queue, f, b )
因为它将具有上面报告的所有属性,因此它将主要生活在同一组范例下。
如果一个人既需要交付的内容保证又需要所有消息交付的保证,前者从一开始就包含在 ZeroMQ 工具中,后者将被添加到标准工具之上,作为扩展的 supra-模式,重新使用与交付无关的标准工具。
通过这种方式,人们可以获得您上面所描绘的内容,但不会在所有其他用例中浪费一个 CPU 时钟,在这些用例中,与交付无关,只是“尽力而为”的传输是可以的。