12
votes

Pure Java Zeromq Clients?

J'essaie d'utiliser la sous-messagerie de Pub de Zeromq, mais le côté client exige que le code soit tout java. Je comprends que Zeromq a une liaison Java mais qui s'appuie toujours sur une bibliothèque C, je suis donc incapable de l'utiliser. Y a-t-il un client zeromq que je peux utiliser pour se connecter au serveur ou est-ce que la mise en œuvre est suffisamment simple pour moi de me faire moi-même?


6 commentaires

Avez-vous déjà utilisé Rabbitmq? Il a un client Java pur. Je n'ai jamais essayé Zeromq mais je pense que vous aurez une jolie classe pour correspondre avec Zeromq: github.com/zeromq/jzmq/blob/master/src/org/zeromq/zmq.java


Êtes-vous mandaté pour une raison quelconque d'utiliser Zeromq? Je n'avais jamais entendu parler de cela, pas que cela implique que ce soit mauvais. Il y a tellement de nombreuses autres options autour qui sont mieux connues et offriront ce que vous demandez.


Eh bien, j'ai besoin d'une messagerie rapide et légère et pensais que Zeromq était un bon ajustement. Cependant, je pourrais essayer autre chose si nécessaire.


J'ai la même question. Zeromq ressemble exactement à ce que je veux sur le côté serveur, mais je veux utiliser Android pour le client. Ces désirs me laissent poser la même question que Fanar.


Toute raison de ne pas choisir l'une des réponses? (Je n'ai pas écrit de "non" défini, car quelqu'un a peut-être écrit une bibliothèque Java uniquement en regardant le protocole de fil, mais si tel est le cas, il n'a pas été publié)


Je serais également intéressé par cela et un client Crossroads-io serait également acceptable.


7 Réponses :


0
votes

Il n'y a actuellement aucune implémentation pure Java de 0mq . Comme vous le dites, il y a une liaison de langue Java, mais elle nécessite une bibliothèque indigène pour fonctionner. Un remplacement pure Java pour la bibliothèque ne serait pas trivial à mettre en œuvre.


0 commentaires

4
votes

À compter d'aujourd'hui, je pense qu'il est prudent de supposer que la réponse à votre question est non .

Un client PURE Java devrait utiliser le même protocole de fil que la mise en œuvre native C ++; Documenter ce protocole n'a pas encore été fait et était sur la liste des développeurs de 0 mq de la dernière fois que j'ai vérifié.


0 commentaires

6
votes

Le site Web Zeromq affirme la prise en charge de Android sur la page Suivre:

http://www.zeromq.org/distro:android

qui comprend une citation de Zeromq pré-construite pour Android, à l'aide du NDK (kit de développement native) qui presse les applications Java aux bibliothèques C Standard C.


1 commentaires

Une correction rapide à ce sujet: elle nécessite un non officiel NDK, pas celui qui vient de Google.



0
votes

Il existe une courte spécification sur le protocole de fil utilisé par Zeromq chez http://rfc.zeromq.org / Spec: 13 . Avec cela, vous devriez au moins être capable d'écrire les parties de protocole du code. Vous auriez toujours besoin d'écrire les pièces qui traitent des sockets Zeromq et de National.


0 commentaires

0
votes

the JavazMQ Projet lancé en août 2011 prétend mettre en œuvre un sous-ensemble de Zeromq à Pure Java. Pas sûr de la complétude à ce stade.


0 commentaires

3
votes

Remarque: je suppose que vous avez installé Zeromq et Google Protoc avec succès

J'ai un exemple où j'envoie des messages d'éditeur de Zeromq à l'abonné à l'aide de Google Protocol Buffer. P>

Test.Proto fichier est strand> p> xxx pré>

maintenant, compilez-le avec protoc compiler comme p> xxx pré>

générera testprotos.java code> fichier dans vos répertoires actuels / com / example / tutoriel code> dossier p>

----------------------------- ---- fin des étapes du tampon de protocole ---------------------------------- P>

Le code de l'éditeur est fort> Nom du fichier: Publisher.java P>

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);
    }
}


0 commentaires

13
votes

Je travaille sur Pure Java Zeromq.

https://github.com/miniway/jeromq

Même il est très précoce et peut ne pas s'adapter à l'utilisation de la production en ce moment.

Mais j'espère que cela vous aiderait, comme je l'ai fait avec une passion.


3 commentaires

Cette bibliothèque est maintenant hébergée sur le profil GitHub de Zeromq. Github.com/zeromq/jeromq . Et le Zeromq Wiki suggère cette bibliothèque à l'aide de la solution NDK.


Min: Je voulais juste dire merci de le porter à Pure Java. J'ai utilisé Jeromq version 0.2.0 (passera à la mise à niveau vers 0,3,1 bientôt) dans Prod pendant environ 5 mois maintenant. Pub / Sub, revendeur / routeur et un motif de majordomo personnalisé, fonctionne comme un charme!


Si j'avais une vieille poussée Zeromq, un client de Jeromq Tirez-vous peut-il pouvoir choisir cela (numéro de socket donné, etc.)?