在 Java 中使用 SUB 没有消息与 ZeroMQ 匹配
No messages match using SUB in Java with ZeroMQ
我正在尝试将 Java 客户端与 ZeroMQ 一起使用。当订阅任何前缀时,Java 客户端不匹配任何消息,尽管类似的 Python 客户端按预期匹配消息。
Python 服务器
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5556")
for i in range(100):
r = "XXX " + i
socket.send_string(r)
time.sleep(random.randint(0,10))
Python 客户端工作正常
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")
zip_filter = "XXX"
socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter)
for update_nbr in range(5):
s = socket.recv_string()
print(s)
Java客户端没有消息匹配
context = ZMQ.context(1);
subscriber = context.socket(ZMQ.SUB);
subscriber.connect("tcp://localhost:5556");
String filter = "XXX";
subscriber.subscribe(filter.getBytes(Charset.forName("UTF-8")));
while (true) {
String msg = subscriber.recvStr(0, Charset.forName("UTF-8"));
// ...
}
使用上面的 Python 服务器,Python 客户端按预期匹配所有以 XXX
开头的消息。
使用相同的 Python 服务器,Java 客户端 不匹配任何消息。
您知道 Java 客户端中对 subscribe()
的调用有什么问题吗?
好的,所以我重新创建了您的配置,遗憾的是,一切正常 - 在 python 和 java 中。 (这是证明))
Java代码:
public class Client {
public static void main(String[] args) {
final Context context = context(1);
final Socket subscriber = context.socket(SUB);
subscriber.connect("tcp://localhost:5556");
String filter = "XXX";
subscriber.subscribe(filter.getBytes(Charset.forName("UTF-8")));
while (true) {
String msg = subscriber.recvStr();
System.out.println(msg);
}
}
}
Maven 依赖:
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jeromq</artifactId>
<version>0.3.4</version>
</dependency>
zeromq 版本:4.1.0
您使用的是什么版本的 jeromq?我什至没有方法 recvStr(int, Java.nio.charset.Charset).
我正在尝试将 Java 客户端与 ZeroMQ 一起使用。当订阅任何前缀时,Java 客户端不匹配任何消息,尽管类似的 Python 客户端按预期匹配消息。
Python 服务器
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5556")
for i in range(100):
r = "XXX " + i
socket.send_string(r)
time.sleep(random.randint(0,10))
Python 客户端工作正常
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")
zip_filter = "XXX"
socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter)
for update_nbr in range(5):
s = socket.recv_string()
print(s)
Java客户端没有消息匹配
context = ZMQ.context(1);
subscriber = context.socket(ZMQ.SUB);
subscriber.connect("tcp://localhost:5556");
String filter = "XXX";
subscriber.subscribe(filter.getBytes(Charset.forName("UTF-8")));
while (true) {
String msg = subscriber.recvStr(0, Charset.forName("UTF-8"));
// ...
}
使用上面的 Python 服务器,Python 客户端按预期匹配所有以 XXX
开头的消息。
使用相同的 Python 服务器,Java 客户端 不匹配任何消息。
您知道 Java 客户端中对 subscribe()
的调用有什么问题吗?
好的,所以我重新创建了您的配置,遗憾的是,一切正常 - 在 python 和 java 中。 (这是证明)
Java代码:
public class Client {
public static void main(String[] args) {
final Context context = context(1);
final Socket subscriber = context.socket(SUB);
subscriber.connect("tcp://localhost:5556");
String filter = "XXX";
subscriber.subscribe(filter.getBytes(Charset.forName("UTF-8")));
while (true) {
String msg = subscriber.recvStr();
System.out.println(msg);
}
}
}
Maven 依赖:
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jeromq</artifactId>
<version>0.3.4</version>
</dependency>
zeromq 版本:4.1.0
您使用的是什么版本的 jeromq?我什至没有方法 recvStr(int, Java.nio.charset.Charset).