Подтвердить что ты не робот

Чистые java-клиенты ZeroMQ?

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

4b9b3361

Ответ 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. Не уверен в ее полноте в этот момент.