在 JeroMQ 中将文件作为消息发送
Send files as message in JeroMQ
在 JeroMQ 中如何使用单个消息发送具有文件内容类型和其他属性的文件。
在客户端:
构建文件消息并发送到服务器
DataInputStream inStrm = file.getContent();
ZMsg msg = ZMsg.load(inStrm);
msg.send(sender);
有什么方法可以设置消息的属性吗?喜欢:
msg.setProperties("Content-Type", "application/xml");
msg.setProperties("fileName", "abc.pdf");
并在服务器中接收文件:
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);
}
}
还有一个办法。 ZeroMq 有 Multipart-Messages
我认为这非常有用。
在 jeromq/jzmq 库中你可以这样使用它:
将文件中的数据存储在字节数组中。
制作一个多部分的 ZMsg,将所有 headers 和您需要的数据放入其中:
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();
或者您可以通过任何其他方便的方式来完成,通过在一个字节数组中序列化所有必要的 headers 并仅使用两个帧等。
在 JeroMQ 中如何使用单个消息发送具有文件内容类型和其他属性的文件。
在客户端:
构建文件消息并发送到服务器
DataInputStream inStrm = file.getContent();
ZMsg msg = ZMsg.load(inStrm);
msg.send(sender);
有什么方法可以设置消息的属性吗?喜欢:
msg.setProperties("Content-Type", "application/xml");
msg.setProperties("fileName", "abc.pdf");
并在服务器中接收文件:
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);
}
}
还有一个办法。 ZeroMq 有 Multipart-Messages
我认为这非常有用。 在 jeromq/jzmq 库中你可以这样使用它:
将文件中的数据存储在字节数组中。 制作一个多部分的 ZMsg,将所有 headers 和您需要的数据放入其中:
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();
或者您可以通过任何其他方便的方式来完成,通过在一个字节数组中序列化所有必要的 headers 并仅使用两个帧等。