[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