Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ZeroMQ无代理队列网络(Java)_Java_Message Queue_Zeromq_Messaging_Jeromq_Distributed Systems - Fatal编程技术网

ZeroMQ无代理队列网络(Java)

ZeroMQ无代理队列网络(Java),java,message-queue,zeromq,messaging,jeromq,distributed-systems,Java,Message Queue,Zeromq,Messaging,Jeromq,Distributed Systems,是否可以使用ZeroMQ(使用JeroMQ Java移植)实现带有队列的无代理网络 在我的网络中,所有的对等点都是发布者和接收者(SUB/PUB模式),因此当一个对等点发送消息时,所有其他对等点都会得到消息 问题是消息不可靠,可能会丢失(例如连接问题)而无法恢复 我想实现一个队列,对等方可以在其中检索他们没有收到的消息 我正在看指南(尽管它是针对Python的),似乎我应该实现XREP/XREQ模式: 但这似乎只可能实现一个队列服务器。这是真的吗?Q:这是否只可能实现队列服务器?a:不可能。

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

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

问题是消息不可靠,可能会丢失(例如连接问题)而无法恢复

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

我正在看指南(尽管它是针对Python的),似乎我应该实现XREP/XREQ模式:

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

Q:这是否只可能实现队列服务器?
a:不可能。 也许我没有完全理解您的观点,但在ZeroMQ中花了几年时间,我可以解决这个概念中的一些失误

第一:
是的,Zen of Zero确实为相应的邮件传递提供零保修。这似乎令人惊讶,但这样做有很多原因,没有其他原因。有一致性保证-即消息按原样发送或根本不发送。这意味着,如果消息是通过套接字发送的,那么接收方可以确定发送方正在发送这些内容,并且不需要进行错误检查,因为ZeroMQ已经尽了所有努力来交付原始内容的1:1逐位副本

下一步:
ZeroMQ被设计为一种无代理的异步轻量级信令/消息传递工具。单词Broker-less意味着,对于任何类型的基于工具的持久性,都不需要花费任何精力,因此实际上,对于任何代理端存储消息的任何(半)持久性副本,不管是那些已交付的还是由于任何技术原因而未交付的消息,都不需要关心(然而,如上所述,交付的产品保证是OK的,并且是原件的准确副本)

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


解决方案 如果既需要交付内容保修,也需要所有消息交付保修,则前者从一开始就包含在ZeroMQ工具中,后者将作为扩展的超模式添加到标准工具之上,重新使用与交付无关的标准工具


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

感谢您提供如此详细的答案。经过许多考虑(并由您的解释确认)我将保留PUB/SUB模式而不保留任何持久性,但我将添加一种新类型的消息,其中将包含最后N条消息的列表。每个对等方将检查是否遗漏了一些消息,如果遗漏了,将进行处理。这是一个非常小的独立“电子商务”网络服务。每次购买都应通知所有其他服务器以保持库存同步(即:购买产品A时,告诉其他服务器减少数量),每N分钟,每个服务器将发送其交易历史记录(仅为最新购买)因此,每台服务器都可以检查它是否拥有所有事务。听起来像是一个没有散列的简化区块链:)是的,重新发布窗口增加了内容交付冗余,并可能帮助不可知发件人重新尝试交付。然而,显式接收接收和/或特定于上下文的请求重新发布的附加层可能有助于减少不可知的发送方数据流,当然要付出一些额外的设计成本,但仍然能够进入上下文感知行为。祝你好运,达科,继续走。。。