2

是否可以使用 ZeroMQ(使用 JeroMQ Java 移植)实现带队列的无代理网络?

在我的网络中,所有对等点都是发布者和接收者(SUB/PUB模式),因此当对等点发送消息时,所有其他对等点都会收到消息。

问题是消息不可靠并且可能会丢失(例如连接问题)并且不再恢复。

我想实现一个队列,对等方可以检索他们未收到的消息。

我正在查看指南(即使它是针对 Python 的),看来我应该实现XREP/XREQ模式:

XREP/XREQ 布局

但似乎这只能实现队列服务器。这是真的吗?

4

1 回答 1

3

问:这可能只实现一个队列服务器吗?
答:没有。

可能是我没有完全理解你的观点,但是在基于 ZeroMQ 的中花了几年时间,我可以解决这个概念中的一些遗漏。

首先:
是的,Zen-of-Zero 确实为相应的消息传递提供了零保修。这可能看起来令人惊讶,但是以这种方式工作有很多原因,没有其他原因。有一致性保证——即消息要么按原样传递,要么根本不传递。这意味着,如果消息已经通过套接字,接收方可能会确定,发送方正在分派这个内容,并且不需要进行错误检查,因为 ZeroMQ 已经花费了所有的精力来传递原件的 1:1 逐位副本。

下一篇:
ZeroMQ 被设计为一个无代理的异步轻量级信令/消息传递工具。Brokerless 这个词意思是,任何类型的基于工具的持久性都需要零努力,因此实际上不需要任何 Broker 端存储消息的任何(半)持久性副本,是由于任何技术原因已交付或未交付的那些(然而,交付的那些 - 如上所述 - 保证是好的并且是原件的精确副本)。

含义:
这意味着,设计 a 的影响为零,zmq.device( zmq.Queue, f, b )因为它将具有上面报告的所有属性,因此它将主要生活在同一组范例下。


解决方案?

如果一个人既需要交付的内容保证又需要所有消息交付的保证,前者从一开始就包含在 ZeroMQ 工具中,后者将被添加到标准工具之上,作为扩展的 supra-模式,重新使用与交付无关的标准工具。

通过这种方式,人们可以获得您上面所描绘的内容,但不会在所有其他用例中浪费一个 CPU 时钟,在这些用例中,与交付无关,只是“尽力而为”的传输是可以的。

于 2018-04-10T18:17:26.503 回答