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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top