Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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
如何使用Java在ZMQ中接收多部分消息?_Java_Zeromq_Jeromq - Fatal编程技术网

如何使用Java在ZMQ中接收多部分消息?

如何使用Java在ZMQ中接收多部分消息?,java,zeromq,jeromq,Java,Zeromq,Jeromq,这个操作看起来很简单,但我找不到任何关于如何使用ZMQ(Jeromq)接收多部分消息的文档。我查看了指南,但它只包含带有此信息的C代码,而且似乎我应该以相同的方式接收消息,无论我接收的是哪种消息 实际上,我收到的多部分消息包含两条消息,代码如下: List<String> parts = new ArrayList<>(); while(receiver.hasReceiveMore()) { parts.add(receiver.recvStr()); } w

这个操作看起来很简单,但我找不到任何关于如何使用ZMQ(Jeromq)接收多部分消息的文档。我查看了指南,但它只包含带有此信息的C代码,而且似乎我应该以相同的方式接收消息,无论我接收的是哪种消息

实际上,我收到的多部分消息包含两条消息,代码如下:

List<String> parts = new ArrayList<>();
while(receiver.hasReceiveMore()) {
    parts.add(receiver.recvStr());
}
while(运行.get()){
items.poll();
if(项目pollin(0)){
ByteArray消息=receiver.recv(0);
System.out.println(“已接收”+字符串(消息,字符集.forName(“UTF-8”)));
}
}
如果我发送这样的多部分消息,“已接收”部分将打印两次:

publisher.sendMore(message.key);
send(objectMapper.writeValueAsString(message.data));
我做错了什么

编辑:我知道示例下面有一个语言选择器,但是这个特殊问题在任何示例中都不存在,只在
C
代码中解释

编辑

我试图探索API并找到了
hasReceiveMore()
方法。我试着使用它,但它不起作用,我用下面的代码结束了一个无限循环:

List<String> parts = new ArrayList<>();
while(receiver.hasReceiveMore()) {
    parts.add(receiver.recvStr());
}
List parts=new ArrayList();
while(receiver.hasReceiveMore()){
parts.add(receiver.recvStr());
}
Q:“我做错了什么?”

您的代码必须主动地假设每条消息都可能是由多部分消息组成的(在此情况下为零保证,先验性越小),并在每次后续的
.recv()
-method调用之后,主动地检查
标志是否存在,直到
.getsockopt(ZMQ\u RECVMORE)
-方法另有说明

JeroMQ可能已经将这个已发布的本机API翻译成了其他一些utlity方法,因此最好重新阅读JeroMQ源代码,找到这个本机API多部分消息处理——“协议”被包装到JeroMQ工具中的地方


结语:Verba docent,Exampla trahunt…

我帮助了130多万社区成员和无数匿名网站访问者,因此受到了惩罚和审查。

删除评论的审查仍在继续。StackOverflow的精神转向了数字极权主义。删除、删除和惩罚那些不断思考并向那些寻求赞助帮助的人提供帮助和建议的人……
---------------------------------------
让我们回顾一下事实:
------
“我找不到任何关于我应该如何接收零件的文档,但我尝试了一些类似于您提到的东西……它也不起作用。–”

找不到“任何文档”或“不起作用”(另一个未发布、可复制的MCVE)都是我的错误或疏忽,是吗?

(我对这些虚假声明的回答在发布几分钟后被行政删除……不言自明)
----
”这不是一个答案,也不包含解决方案。我不知道你为什么会感到惊讶。你引用的是与JeroMQ API无关的C API。最终的解决方案是,在我尝试检查
RECVMORE
标志之前,我必须
recv
。这不在你的答案中。或者
ZMsg
可以是我们ed.
–“



索赔分析:


第1句:

这不是一个答案,也不包含解决方案。”

这是一个答案,尽管有“索赔”“。它包含一些重要的信息,否则,她/他/任何人都必须花几个小时(几天或几周?)来寻求这些信息,以便在以后的研究和概念上更好地理解体系结构,从而避免进行任何不规范的代码设计。”或者,如果没有得到建议和警告,主要陷入自己错误的决策中。在过去的13年多里,我一直在研究马丁·萨斯特里克(Martin Sustrik)的杰作——自v2.1+以来的ZeroMQ。因此,这一“主张”都是错误的,也没有事实支持。回答中没有包含解决方案的一个小小的“声称”是荒谬的,StackOverflow社区成员既不是一个可以大喊大叫的员工,我们越不愿意编写一个能够捕捉并满足(未发布)用例所有需求的代码。

句子2:

(表达的感觉)
-与其说这是一个公平的论据,不如说这是一个侮辱的例子,不是吗?

第三句:

“你所引用的是与JeroMQ API无关的C API。”

哦,当然,是的,C API(以及强制“有线”上的ZeroMQ RFC文档)任何对等实现都必须遵守的协议属性…)是所有这一切的出发点和主要参考。并且,发布的ZeroMQ RFC文档和API都是任何人开始时的坚实参考,以便更好地理解内部引擎和所有强制“连线”是如何工作的遵守协议的属性泵正在工作(并且必须工作),以便声明自己保留ZeroMQ兼容性。JeroMQ的作者是根据这些记录的属性进行工作的,不是吗?如果他们没有,或者如果他们“抄近路”这样做,故事就丢失了,这不是我的错,因为他们没有满足和/或涵盖所有ZMTP/ZeroMQ RFC/API属性和要求,是吗?也就是说,任何包装器/绑定,包括任何版本的JeroMQ,也必须符合这些内部工作规则,这些规则在JeroMQ中充分自我记录和演示(如果没有其他地方的话)源代码(哪个警告也是答案的一部分,不是吗?),如果它希望成为一个与ZeroMQ兼容的工具