具有队列的ZeroMQ无代理网络(Java)

时间:2018-04-09 09:48:34

标签: java message-queue zeromq messaging jeromq

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

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

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

我想实现一个队列,其中对等体可以检索他们没有收到的消息。

我正在查看this指南(即使它适用于Python),似乎我应该实现 XREP / XREQ 模式:

XREP/XREQ layout

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

1 个答案:

答案 0 :(得分:1)

问:这是否只能实现队列服务器?
答:否。

可能我没有完全明白你的观点,但是在ZeroMQ 内度过了几年,我可以解决这个概念中的一些失误。

<强>首先
是的,Zen-of-Zero确实为相应的消息传递提供了ZERO-Warranty。这可能看起来令人惊讶,但有很多理由以这种方式工作,而不是其他。保证一致性 - 即消息按原样传送或根本不传送。这意味着,如果消息已通过套接字,则接收方可能确定发送方正在调度此内容并且不需要进行错误检查,因为ZeroMQ已经花费了所有精力来交付原始的1:1逐位副本。

下一步:
ZeroMQ被设计为无Broker的异步轻量级信令/消息传递工具。 Broker- less 这个词意味着,任何类型的基于工具的持久性都有零努力,所以确实没有关心任何Broker端存储任何(半)持久性副本( s)消息,无论是由于任何技术原因而交付的那些消息或未交付的消息(但是,如上所述,这些消息保证是正确的,并且是原件的精确副本)。

<强>含意:
这意味着,设计 zmq.device( zmq.Queue, f, b ) 将不会产生任何影响,因为这将包含上面报告的所有属性,因此它主要存在于同一组范例中。

解?

如果需要同时提供所提供的内容保修以及所有消息提供的保修,前者包含在ZeroMQ工具中,自成立以来,后者将添加到标准工具之上,作为扩展超模式,重新使用与交付无关的标准工具。

通过这种方式,您可以获得上面描述的内容,但不会在所有其他用例中浪费单个CPU时钟,其中交付无关,只是&#34;尽力而为&#34;运输还可以。