在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).