Я пытаюсь использовать суб-обмен сообщениями ZeroMQ, но клиентская сторона требует, чтобы код был всем Java. Я понимаю, что ZeroMQ имеет привязку Java, но все еще полагается на библиотеку c, поэтому я не могу ее использовать. Есть ли клиент ZeroMQ, который я могу использовать для подключения к серверу, или для меня достаточно простая реализация?
Чистые java-клиенты ZeroMQ?
Ответ 1
На сегодняшний день, я думаю, можно с уверенностью предположить, что ответ на ваш вопрос нет.
Чистый Java-клиент должен будет использовать тот же протокол проводов, что и встроенная реализация на С++; документирование этого протокола еще не сделано и в последний раз, когда я проверял, был в списке разработчиков TODO 0MQ.
Ответ 2
Я работаю над чистым java ZeroMQ.
https://github.com/miniway/jeromq
Даже это очень ранняя стадия и может не совсем соответствовать нынешнему уровню использования.
Но я надеюсь, что это поможет, поскольку я сделал это со страстью.
Ответ 3
Веб-сайт zeromq утверждает, что поддержка android на следующей странице:
http://www.zeromq.org/distro:android
который включает в себя tarball zeromq, предварительно созданный для android, с использованием NDK (Native Development Kit), который соединяет приложения Java со стандартными библиотеками c.
Ответ 4
Примечание. Я предполагаю, что вы успешно установили ZeroMQ и google protoc
У меня есть один пример, когда я отправляю сообщения от ZeroMQ Publisher подписчику, используя буфер протокола google.
Файл test.proto
option java_package = "com.example.tutorial";
option java_outer_classname = "TestProtos";
message Test {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
теперь сначала скомпилируйте его с компилятором protoc как
$protoc -I=. --java_out=. test.proto
Таким образом, это приведет к созданию файла TestProtos.java
в ваших текущих каталогах
/com/example/tutorial
папка
--------------------------------- конец шагов буфера протокола --------- -----------------
Код издателяимя файла: Publisher.java
import org.zeromq.ZMQ;
import com.example.tutorial.TestProtos.Test;
public class Publisher {
public static void main (String[] args) {
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket publisher = context.socket(ZMQ.PUB);
// Subscriber tells us when it ready here
ZMQ.Socket sync = context.socket(ZMQ.PULL);
sync.bind("tcp://*:5561");
// We send updates via this socket
publisher.bind("tcp://*:5562");
System.out.println("Publisher Running");
// Wait for synchronization request
sync.recv(0);
Test testzmq =
Test.newBuilder()
.setId(1234)
.setName("Pritam Kharat")
.setEmail("[email protected]")
.build();
long start = System.currentTimeMillis ();
int request_nbr;
for (request_nbr = 0; request_nbr != 10; request_nbr++) {
//System.out.println(request_nbr);
publisher.send(testzmq.toByteArray(), 0); //serialization
}
long end = System.currentTimeMillis ();
long diff = (end - start);
System.out.println("time taken to send messages "+ request_nbr +" is :" +diff);
}
}
Код подписчика имя файла: Subscriber.java
import org.zeromq.ZMQ;
import com.example.tutorial.TestProtos.Test;
public class Subscriber {
public static void main (String[] args) {
ZMQ.Context context = ZMQ.context(1);
// Connect our subscriber socket
ZMQ.Socket subscriber = context.socket(ZMQ.SUB);
subscriber.setIdentity("hello".getBytes());
// Synchronize with the publisher
ZMQ.Socket sync = context.socket(ZMQ.PUSH);
subscriber.subscribe("".getBytes());
subscriber.connect("tcp://localhost:5562");
sync.connect("tcp://localhost:5561");
sync.send("".getBytes(), 0);
long start = System.currentTimeMillis ();
int request_nbr;
for (request_nbr = 0; request_nbr != 10; request_nbr++) {
byte[] rawBytes = subscriber.recv(0);
try{
Test data = Test.parseFrom(rawBytes); //deserialization
// System.out.println(data);
}
catch ( Exception e ) {
}
}
long end = System.currentTimeMillis ();
long diff = (end - start);
System.out.println("time taken to receive messages "+ request_nbr +" is :" +diff);
}
}
Вот и все.. с твоим кодом.. Теперь просто запустите эти коды издателей и подписчиков.
Ответ 5
В настоящее время нет чистой реализации Java 0mq
. Как вы говорите, существует привязка к языку Java, но для этого требуется встроенная библиотека. Чистая замена Java для библиотеки не будет тривиальной для реализации.
Ответ 6
В проводном протоколе, используемом ZeroMQ, есть короткая спецификация в http://rfc.zeromq.org/spec:13. При этом вы должны, по крайней мере, иметь возможность писать части протокола кода. Вам все равно нужно будет написать части, которые имеют отношение к сокетам ZeroMQ и еще что-то.
Ответ 7
Проект javazmq, запущенный в августе 2011 года, требует реализовать подмножество ZeroMQ в чистой Java. Не уверен в ее полноте в этот момент.