[zeromq-dev] Client hang on recv
Mohit Anchlia
mohitanchlia at gmail.com
Tue Sep 23 20:16:10 CEST 2014
I am trying to use router/dealer with dealer using inproc://, when I run my
program the router seems to bind to the port (netstat), client seem to
connect successfully but the recv after send hangs. Worker on the other
hand doesn't see the request come in from router/dealer. Here is the
snippet of my code, not sure what is wrong here:
Router/Dealer:
log.info("Starting ZeroMQ Router on port=" + port);
// Prepare our context and socket
ZMQ.Context context = ZMQ.context(1);
// Socket to talk to clients
ZMQ.Socket clients = context.socket(ZMQ.ROUTER);
clients.bind("tcp://*:" + port);
// Socket to talk to workers
ZMQ.Socket workers = context.socket(ZMQ.DEALER);
workers.bind("inproc://workers");
// Connect work threads to client threads via a queue
ZMQQueue queue = new ZMQQueue(context, clients, workers);
new Thread(queue).start();
log.info("Exiting ZeroMQ");
Worker:
public JMSZMQRepServer() {
this.context = ZMQ.context(1);
socket = context.socket(ZMQ.REP);
socket.bind("inproc://workers");
log.info("Server bind inproc");
}
@Override
public void run() {
while (true) {
// Wait for next request from client (C string)
try {
log.info("Start");
String request = socket.recvStr(0);
// String request = new String(GZIPUtils.gunzip(socket.recv()));
// Do some 'work'
String response = null;
response = doWork(request);
// Send reply back to client (C string)
socket.send(response, 0);
} catch (ZMQException e) {
if (e.getErrorCode() == ZMQ.Error.ETERM.getCode()) {
log.warn("Exiting ", e.getMessage());
break;
} else {
log.error("Unable to send request", e);
}
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("Error in gunzip", e);
}
}
if (null != socket) {
log.info("Socket closed");
socket.close();
}
}
Client:
public JMSZMQClient() {
context = ZMQ.context(1);
requester = context.socket(ZMQ.REQ);
requester.connect("inproc://workers");
log.info("Connected to in proc workers");
}
public String processRequest(String json) throws DataStoreException {
String result = null;
long latency = System.currentTimeMillis();
// byte [] bJson = GZIPUtils.gzip(json.getBytes());
log.info("Send request to zMQ server");
// requester.send(bJson);
requester.send(json, 0);
result = requester.recvStr(0);
log.info("ZeroMQ client took="
+ (System.currentTimeMillis() - latency));
MessageUtil.validateZMQMessage(result);
return result;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140923/d8984168/attachment.htm>
More information about the zeromq-dev
mailing list