Нет совпадений сообщений с использованием SUB в Java с 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 не находит сообщений.
Есть ли у вас какие-либо идеи, что не так с призывом subscribe()
в клиенте Java?
1 ответ
Итак, я воссоздал вашу конфигурацию и, к сожалению, все работает отлично - как в 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).