Чистые клиенты Java ZeroMQ? - PullRequest
       27

Чистые клиенты Java ZeroMQ?

12 голосов
/ 15 августа 2010

Я пытаюсь использовать паб-сообщения ZeroMQ в пабе, но на стороне клиента требуется, чтобы весь код был Java.Я понимаю, что ZeroMQ имеет привязку Java, но она все еще зависит от библиотеки ac, поэтому я не могу ее использовать.Есть ли клиент ZeroMQ, который я могу использовать для подключения к серверу, или реализация достаточно проста для меня?

Ответы [ 7 ]

12 голосов
/ 03 сентября 2012

Я работаю над чистым Java ZeroMQ.

https://github.com/miniway/jeromq

Даже это очень ранняя стадия и может не совсем подходить для производственного использования сейчас.Но я надеюсь, что это поможет, поскольку я сделал это со страстью.

6 голосов
/ 19 февраля 2011

Сайт zeromq заявляет о поддержке Android на следующей странице:

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

, который включает в себя архив zeromq, предварительно созданный для Android, с использованием NDK (Native Development Kit), который связывает приложения Java со стандартными библиотеками C.

4 голосов
/ 07 декабря 2010

На сегодняшний день, я думаю, можно с уверенностью предположить, что ответ на ваш вопрос нет .

Чистый Java-клиент должен использовать тот же проводной протокол, что и собственная реализация C ++; документирование этого протокола еще не было сделано и было в списке разработчиков TODO 0MQ в прошлый раз, когда я проверял.

2 голосов
/ 24 августа 2012

Примечание. Я предполагаю, что вы успешно установили 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'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.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);
    }
}

Вот и все .. вы закончили с вашим кодом .. Теперь просто запустите эти коды издателя и подписчика ..

0 голосов
/ 26 июня 2012

Проект javazmq , начатый в августе 2011 года, претендует на реализацию подмножества ZeroMQ в чистой Java.Не уверен в полноте этого на данный момент.

0 голосов
/ 08 января 2012

Существует краткая спецификация протокола проводной связи, используемой ZeroMQ, по адресу http://rfc.zeromq.org/spec:13.. При этом вы, по крайней мере, сможете писать части кода для кода. Вам все еще нужно написать части, которые касаются сокетов ZeroMQ и еще много чего.

0 голосов
/ 26 октября 2010

В настоящее время нет чистой реализации Java 0mq. Как вы говорите, существует привязка к языку Java, но для ее работы требуется собственная библиотека. Чистая замена Java для библиотеки не будет тривиальной реализацией.

...