2016-12-20 5 views
1

JeroMQでは、ファイルのコンテンツタイプとその他のプロパティを1つのメッセージで送信する方法。クライアントでファイルをJeroMQのメッセージとして送信

ビルドファイルのメッセージとサーバに

DataInputStream inStrm = file.getContent(); 
ZMsg msg = ZMsg.load(inStrm); 
msg.send(sender); 

を送信メッセージにプロパティを設定する方法はありますか?以下のような:別の方法があり

Poller items = new ZMQ.Poller (2); 
items.register(receiver, ZMQ.Poller.POLLIN); 
while (true) { 
    try{ 
     items.poll();  
     if (items.pollin(0)) { 
      ZMsg msg = ZMsg.recvMsg(receiver); 
      //save file to disk 
     } 
    }catch(Exception e){ 
     LOG.error("Error while receive file: ", e); 
    } 
} 
+0

'ZMsg.load'は、以前に' ZMsg.save '、ファイルから任意のデータを送信するためのものではありません。 – David

+0

と、ファイルを送信するために使用される方法は何ですか? – Rembo

答えて

3

msg.setProperties("Content-Type", "application/xml"); 
msg.setProperties("fileName", "abc.pdf"); 

とサーバで、ファイルを受信します。 ZeroMqはMultipart-Messages

私の意見では非常に役に立ちます。 jeromq/jzmqライブラリでは、次のように使用できます。

ファイルからのデータをバイト配列で格納します。 は、あなたが内部の必要なすべてのヘッダとデータを入れて、マルチパートZMsgを行います

ZMsg outMsg = new ZMsg(); 
outMsg.add(new ZFrame("application/xml")); 
outMsg.add(new ZFrame("abc.pdf")); 
outMsg.add(new ZFrame(bytes)); // here is the data from file 
outMsg.send(outSocket); 

は別のソケットからZMsgを受信し、そこからすべてのデータを取得:

ZMsg inMsg = ZMsg.recvMsg(inSocket); 
String contentType = inMsg.pop().toString(); 
String fileName = inMsg.pop().toString(); 
byte[] fileData = inMsg.pop().getData(); 

それとも、他の都合でそれを行うことができます1つのバイト配列のすべての必要なヘッダを直列化し、2つのフレームだけを使用することで、このようになります。

+0

ありがとう、それは動作します。 – Rembo

関連する問題