12

ZeroMQのpubsubメッセージングを使用しようとしていますが、クライアント側ではコードがすべてJavaである必要があります。ZeroMQにはJavaバインディングがあることを理解していますが、それでもacライブラリに依存しているため、使用できません。サーバーへの接続に使用できるZeroMQクライアントはありますか、それとも実装は自分で行うのに十分簡単ですか?

4

7 に答える 7

13

私は純粋なJavaZeroMQに取り組んでいます。

https://github.com/miniway/jeromq

それでも非常に初期の段階であり、現時点では本番環境での使用には適していない可能性があります。

しかし、私は情熱を持ってそれを作ったので、それが役立つことを願っています。

于 2012-09-03T09:10:22.767 に答える
6

zeromq Webサイトは、次のページでAndroidのサポートを主張しています。

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

これには、Javaアプリを標準cライブラリにブリッジするNDK(Native Development Kit)を使用して、Android用に事前に構築されたzeromqのtarballが含まれています。

于 2011-02-19T05:20:41.577 に答える
4

今日の時点で、あなたの質問に対する答えはノーであると考えるのが安全だと思います。

純粋なJavaクライアントは、ネイティブC++実装と同じワイヤープロトコルを使用する必要があります。このプロトコルの文書化はまだ行われておらず、前回チェックしたときに0MQ開発者のTODOリストに含まれていました。

于 2010-12-07T20:57:15.773 に答える
3

注:ZeroMQとgoogleprotocが正常にインストールされていることを前提としています

Googleプロトコルバッファを使用してZeroMQパブリッシャーからサブスクライバーにメッセージを送信している例が1つあります。

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

これですべてです。コードはこれで完了です。これらのパブリッシャーコードとサブスクライバーコードを実行するだけです。

于 2012-08-24T12:33:05.733 に答える
0

ZeroMQで使用されるワイヤープロトコルに関する短い仕様がhttp://rfc.zeromq.org/spec:13にあります。これで、少なくともコードのプロトコル部分を記述できるはずです。それでも、ZeroMQソケットなどを処理する部分を作成する必要があります。

于 2012-01-08T19:58:43.303 に答える
0

現在、の純粋なJava実装はありません0mq。あなたが言うように、Java言語バインディングがありますが、それは機能するためにネイティブライブラリを必要とします。ライブラリの純粋なJava置換は、実装するのが簡単ではありません。

于 2010-10-26T14:12:29.077 に答える
0

2011年8月に開始されたjavazmqプロジェクトは、純粋なJavaでZeroMQのサブセットを実装すると主張しています。現時点では、その完全性についてはよくわかりません。

于 2012-06-26T12:04:52.750 に答える