在ZeroMQ中使用Java中的SUB没有消息匹配

我正在尝试使用ZeroMQ的Java客户端。 订阅任何前缀时,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中。 (这是certificate) 在此处输入图像描述

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依赖:

  org.zeromq jeromq 0.3.4  

zeromq版本:4.1.0

你用的是什么版本的jeromq? 我甚至没有方法recvStr(int, Java.nio.charset.Charset).