问题标签 [jeromq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
512 浏览

request - zeromq route-req java示例不起作用

我在 Eclipse 中使用 jeromq-0.3.2.jar 库运行这个官方 Java 示例,如果我“运行”它,它就不起作用,它只有在我设置一些断点并“调试”它时才起作用。

消息似乎丢失了。我自己使用 route-req 模式的应用程序也有这个问题。

这是他们的官方示例,如果这不起作用,那还能做什么?有人可以尝试一下并找出原因吗?

http://zguide.zeromq.org/java:rtreq

或代码在这里:

0 投票
1 回答
457 浏览

json - jeroMQ 的消息传递库

我选择了 jeroMQ 来构建用于从多个客户端发布内容的异步消息通道。在另一端,服务器端工作人员仅在服务器想要根据收到的消息通知客户端时才处理请求并通知客户端。

在深入挖掘时,寻找消息库来编组/取消编组消息。我发现 kvpmsg 类可以完成简单键值的工作。

如果存在某些标准库,则不想重新发明轮子,可以将其应用于更大的对象

0 投票
1 回答
2141 浏览

java - 干净地中断 zeromq 轮询线程

我有一个使用 jeromq 0.3.2 用 Ja​​va 编写的多线程应用程序。我正在努力将它放入 Tanuki 服务包装器中,以便它作为 Windows 服务运行,并且我在干净地停止线程方面遇到了一些麻烦。代理的run()方法是简单海盗模式的变体,来自指南,如下所示:

当控制包装想要停止应用程序时,我怎样才能干净地退出这个循环?

如果当前没有连接客户端,则循环在调用时被阻塞poller.poll(),因此如果包装器调用interrupt()线程,则将其忽略。如果当前有客户端正在发送消息,则调用 会interrupt()导致该poller.poll()方法抛出一个zmq.ZError$IOException: java.nio.channels.ClosedByInterruptException

我也尝试过使用:

但调用ZMQ.poll表现出相同的行为。两种可能的选择是:

  • 设置超时ZMQ.poll并将方法的内容包装在run()IOException 的 try/catch 中。
  • 向我的 Runnable 添加一个方法,该方法将连接到前端并发送一条特殊消息,该消息将被读入processFrontend并导致代码跳出循环。

第一个看起来有点脏,第二个感觉有点脆弱。还有其他我应该考虑的方法吗?我可以使用其他一些轮询方法来更清晰地对线程中断做出反应吗?

0 投票
1 回答
455 浏览

java - 为什么 jeromq 使用 setReuseAddress(true)?

我是 zeromq 的新手,对套接字没有经验。

ZeroMQ 套接字是否应该只允许一个套接字绑定()到一个端口?

jeromq 实现允许多个;pyzmq 没有。谁是正确的?

jeromq ZMQ.Socket.bind() 函数最终归结为:

https://github.com/zeromq/jeromq/blob/master/src/main/java/zmq/TcpListener.java#L141

Python:

0 投票
0 回答
693 浏览

java - JeroMQ 不能跨平台工作

我正在尝试让运行 ZMQ v 3.2.0 的本机 C 版本的设备与使用 pub/sub ZMQ 套接字使用 JeroMQ(纯 Java impl)构建的 Java 应用程序一起工作。但是,似乎 JeroMQ 在消息有效负载与 C 实现之前使用了不同的标志配置。IIRC,JeroMQ 旨在与 v 3.2.2 兼容,所以我不确定这是否是 JeroMQ 端口中的错误

我的 Java 测试代码类似于 psenvpub 示例: public class psenvpub {

我正在为 Native C 端点使用 perl 脚本:

当订阅者收到第一条消息时,由于 libzmq 源代码中的断言失败而崩溃:

这是:

对发送的数据包的wireshark 跟踪显示,JeroMQ pub/sub 和本机 C pub/sub 之间的握手序列和标志不同。使用 JeroMQ 或原生 C libzmq 的端点时,我没有看到任何问题。

0 投票
3 回答
2297 浏览

sockets - JeroMQ 正确关闭

我想知道如何正确关闭 JeroMQ,到目前为止,我知道三种方法各有利弊,但我不知道哪一种是最好的。

情况:

  • 线程 A:拥有上下文,应提供启动/停止方法
  • 线程 B:实际监听线程

我目前的方法:

线程 A

线程 B

这很好用。10ms 关机对我来说没问题,但是当没有收到消息时,我会不必要地增加 CPU 负载。目前我更喜欢这个。


第二种方法在两个线程之间共享套接字:

线程 A

线程 B

也像魅力一样工作,但即使recv已经阻止异常有时也不会被抛出。如果我在启动线程 A 后等待一毫秒,则总是会抛出异常。我不知道这是错误还是我滥用的影响,因为我共享套接字。


“revite”之前问过这个问题(https://github.com/zeromq/jeromq/issues/116)并得到了答案,这是第三个解决方案: https ://github.com/zeromq/jeromq/blob/master/ src/test/java/guide/interrupt.java

摘要:他们调用ctx.term()并中断socket.recv().

这工作正常,但我不想终止我的整个上下文,而只是这个单一的套接字。我必须为每个套接字使用一个上下文,所以我无法使用 inproc。

概括

目前,除了使用超时、共享套接字或终止整个上下文之外,我不知道如何让线程 B 脱离阻塞状态。

这样做的正确方法是什么?

0 投票
1 回答
1288 浏览

java - 使用 jeroMQ 推送

我认为我的 zmq.jar 有问题所以我尝试使用 jeroMQ 但我有同样的问题。

这是我的方法:

我在 python 中有一个 PULL 脚本,如果我也在 python 中尝试推送脚本,它会接收所有内容。

所以我的问题是在java中。

我在日志中看到第一行(“发送”),但我没有收到脚本中的任何内容。

我应该改变什么?

0 投票
0 回答
154 浏览

zeromq - 为什么jeromq推送发送一段时间后失败

我正在尝试将推/拉模式与 jeromq(0.3.2) 一起使用。在开始时,它运作良好。但经过一段时间。推送方不发送消息并在那里被阻止。我不知道为什么。我设置了 sendTimeout 参数,并打印了 zmq 套接字错误号。它是 35。有什么我没有注意到的吗?或其他建议?

谢谢!

推送端代码:

====

我添加了一个监控推送端的监控线程。然后,我发现了 ZMQ_EVENT_DISCONNECTED 事件。那什么意识?我的拉边代码有问题吗?

0 投票
1 回答
132 浏览

zeromq - 线程未通过 ZMQ.context(1)

我正在尝试实现一个简单的 pub sub 示例,其中我有一个服务器,并且正在向客户端发布有关正常运行时间的定期通知。

这是作为 Windows 服务的一部分运行的 - 与 InnoSetup、launch4j 和 Apache procrun/prunsrv 捆绑在一起。

线程不会超出上下文的创建。可能出了什么问题?

0 投票
1 回答
1095 浏览

java - Zcontext.destroy() 挂起而不是终止所有打开的套接字

我有一个用 Java 编写的服务器 - (在 REQ-REP 和 PUB-SUB 模式中使用 ZeroMQ。)我使用 Apache Commons Daemon (prunsrv/procrun) 将它包装为 Windows 服务

有时对 ZContext.destroy 的调用会挂起。当上下文没有被破坏时,我已经设法获得堆栈跟踪。如果我理解正确, ZContext.destroy() 应该管理所有套接字的终止。可能是什么问题呢?

我已经粘贴了上下文没有被破坏时收到的堆栈跟踪 - 但我们必须结束该过程。

给出以下跟踪: