Pure Java ZeroMQ Kunden?
-
28-09-2019 - |
Frage
Ich versuche ZeroMQ Pub, Sub-Nachrichten, aber die Client-Seite muss den Code sein, alle Java zu verwenden. Ich verstehe, dass ZeroMQ hat eine Java-Bindung, aber das setzt weiterhin auf eine C-Bibliothek, also bin ich nicht in der Lage, es zu benutzen. Gibt es eine ZeroMQ Client ich verwenden kann, um mit dem Server zu verbinden, oder ist die Implementierung einfach genug für mich selbst zu tun?
Lösung
Ab heute, ich denke, es ist sicher anzunehmen, dass die Antwort auf Ihre Frage ist nicht .
Ein reiner Java-Client müßte das gleiche Draht-Protokoll als native C ++ Implementierung verwenden; dieses Protokoll zu dokumentieren wurde noch nicht getan noch und war auf den 0MQ Entwickler ToDo-Liste letzte Mal habe ich geprüft.
Andere Tipps
Ich arbeite an reiner Java ZeroMQ.
https://github.com/miniway/jeromq
Auch ist es sehr früh und vielleicht nicht ganz für den Produktionseinsatz paßt jetzt.
Aber ich hoffe, es würde helfen, wie ich es mit einer Leidenschaft gemacht.
Die zeromq Website Ansprüche Unterstützung für Android auf der Folgeseite:
http://www.zeromq.org/distro:android
, die für Android einen Tarball von zeromq Vorgefertigte enthält, mit dem NDK (native Development Kit), die Brücken Java-Anwendungen auf Standard-C-Bibliotheken.
Hinweis: Ich gehe davon aus, dass Sie ZeroMQ installiert haben und Google Protoc erfolgreich
Ich habe ein Beispiel, wo ich einige Nachrichten von ZeroMQ Publisher Subscriber sende Google Protokoll Puffer ..
test.proto Datei
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;
}
nun zunächst kompiliert es mit Protoc Compiler als
$protoc -I=. --java_out=. test.proto
So wird diese TestProtos.java
Datei in Ihrem aktuellen Verzeichnisse erzeugen
/com/example/tutorial
Ordner
--------------------------------- Ende der Protokollpuffer Schritte --------- -----------------
Publisher-Code ist Dateinamen: 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's 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("pritam@gmail.com")
.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-Code ist Dateiname: 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);
}
}
Das ist all..you mit Ihrem Code fertig ist .. Jetzt brauchen Sie nur diese Publisher und Subscriber-Codes ausführen ..
Es gibt derzeit keine reine Java-Implementierung von 0mq
. Wie Sie sagen, ist es eine Java-Sprachbindung, aber es erfordert eine native Bibliothek Funktion. Ein reiner Java Ersatz für die Bibliothek nicht trivial zu implementieren sein.
Es gibt eine kurze spec auf dem Draht-Protokoll von ZeroMQ verwendet unter http://rfc.zeromq.org / spec: 13 . Damit sollten Sie zumindest die Lage sein, das Protokoll Teile des Codes zu schreiben. Sie würden immer noch die Teile, die sich mit ZeroMQ Steckdosen und so weiter schreiben müssen.
Das javazmq Projekt startete im August 2011 Ansprüche eine Teilmenge von ZeroMQ in reinem Java zu implementieren. Nicht sicher, der Vollständigkeit der es an dieser Stelle.