Re: [zeromq-dev] Client hang on recv
Sorry to reply to this late, but did you resolve your issue? I noticed in your code snippet, you are using two different instances of ZMQ.Context, one in your Router/Dealer queue, a different one in your Worker. I believe you would need to use the same context in order for inproc to work. That explains why switching to tcp works. On Sep 23, 2014, at 1:16 PM, Mohit Anchlia wrote: > 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; > } > > > > ___ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev ___ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev
Re: [zeromq-dev] Client hang on recv
Actually I took these dependency from the maven project published by zeromq. All the examples that are published in github are using this dependency. On Wed, Sep 24, 2014 at 12:39 PM, Mohit Anchlia wrote: > I see, does it matter which one I chose? > > On Wed, Sep 24, 2014 at 12:35 PM, Trevor Bernard > wrote: > >> You shouldn't include both as a dependency -- the results would not be >> deterministic. I would choose either jeromq or jzmq. >> >> On Wed, Sep 24, 2014 at 4:32 PM, Mohit Anchlia >> wrote: >> > This is my java dependency: >> > >> > >> > >> > >> > >> > org.zeromq >> > >> > jeromq >> > >> > 0.3.4 >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > org.zeromq >> > >> > jzmq >> > >> > 3.1.0 >> > >> > >> > >> > >> > >> > >> > On Wed, Sep 24, 2014 at 12:12 PM, Pieter Hintjens >> wrote: >> >> >> >> What version of ZeroMQ are you using? >> >> >> >> On Wed, Sep 24, 2014 at 8:17 PM, Mohit Anchlia > > >> >> wrote: >> >> > When I change from inproc:// to tcp:// everything seem to work. Not >> sure >> >> > why >> >> > it's not working, perhaps order in which things are started? I am >> >> > starting >> >> > in this order: >> >> > >> >> > 1) Bring up router/dealer -> This also connects router to dealer >> through >> >> > ZMQQueue. Router is tcp and dealer is inproc >> >> > 2) Bring up workter and connect to inproc >> >> > >> >> > When I change everything to tcp:// it works with exact same code and >> >> > sequence of operations >> >> > >> >> > On Tue, Sep 23, 2014 at 11:16 AM, Mohit Anchlia < >> mohitanch...@gmail.com> >> >> > wrote: >> >> >> >> >> >> 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.connect("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; >> >> >>
Re: [zeromq-dev] Client hang on recv
I see, does it matter which one I chose? On Wed, Sep 24, 2014 at 12:35 PM, Trevor Bernard wrote: > You shouldn't include both as a dependency -- the results would not be > deterministic. I would choose either jeromq or jzmq. > > On Wed, Sep 24, 2014 at 4:32 PM, Mohit Anchlia > wrote: > > This is my java dependency: > > > > > > > > > > > > org.zeromq > > > > jeromq > > > > 0.3.4 > > > > > > > > > > > > > > > > > > > > org.zeromq > > > > jzmq > > > > 3.1.0 > > > > > > > > > > > > > > On Wed, Sep 24, 2014 at 12:12 PM, Pieter Hintjens wrote: > >> > >> What version of ZeroMQ are you using? > >> > >> On Wed, Sep 24, 2014 at 8:17 PM, Mohit Anchlia > >> wrote: > >> > When I change from inproc:// to tcp:// everything seem to work. Not > sure > >> > why > >> > it's not working, perhaps order in which things are started? I am > >> > starting > >> > in this order: > >> > > >> > 1) Bring up router/dealer -> This also connects router to dealer > through > >> > ZMQQueue. Router is tcp and dealer is inproc > >> > 2) Bring up workter and connect to inproc > >> > > >> > When I change everything to tcp:// it works with exact same code and > >> > sequence of operations > >> > > >> > On Tue, Sep 23, 2014 at 11:16 AM, Mohit Anchlia < > mohitanch...@gmail.com> > >> > wrote: > >> >> > >> >> 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.connect("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; > >> >> } > >> >> > >> >> > >> >> > >> > > >> > > >> > ___ > >> > zeromq-dev mailing list > >> > zeromq-dev@lists.zeromq.org > >> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > >> > > >> ___ > >> zeromq-dev mailing list > >> zeromq-dev@lists.zeromq.org > >> http://lists.zeromq.org/mailma
Re: [zeromq-dev] Client hang on recv
You shouldn't include both as a dependency -- the results would not be deterministic. I would choose either jeromq or jzmq. On Wed, Sep 24, 2014 at 4:32 PM, Mohit Anchlia wrote: > This is my java dependency: > > > > > > org.zeromq > > jeromq > > 0.3.4 > > > > > > > > > > org.zeromq > > jzmq > > 3.1.0 > > > > > > > On Wed, Sep 24, 2014 at 12:12 PM, Pieter Hintjens wrote: >> >> What version of ZeroMQ are you using? >> >> On Wed, Sep 24, 2014 at 8:17 PM, Mohit Anchlia >> wrote: >> > When I change from inproc:// to tcp:// everything seem to work. Not sure >> > why >> > it's not working, perhaps order in which things are started? I am >> > starting >> > in this order: >> > >> > 1) Bring up router/dealer -> This also connects router to dealer through >> > ZMQQueue. Router is tcp and dealer is inproc >> > 2) Bring up workter and connect to inproc >> > >> > When I change everything to tcp:// it works with exact same code and >> > sequence of operations >> > >> > On Tue, Sep 23, 2014 at 11:16 AM, Mohit Anchlia >> > wrote: >> >> >> >> 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.connect("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; >> >> } >> >> >> >> >> >> >> > >> > >> > ___ >> > zeromq-dev mailing list >> > zeromq-dev@lists.zeromq.org >> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> > >> ___ >> zeromq-dev mailing list >> zeromq-dev@lists.zeromq.org >> http://lists.zeromq.org/mailman/listinfo/zeromq-dev > > > > ___ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > ___ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev
Re: [zeromq-dev] Client hang on recv
This is my java dependency: org.zeromq *jeromq* 0.3.4 org.zeromq *jzmq* 3.1.0 On Wed, Sep 24, 2014 at 12:12 PM, Pieter Hintjens wrote: > What version of ZeroMQ are you using? > > On Wed, Sep 24, 2014 at 8:17 PM, Mohit Anchlia > wrote: > > When I change from inproc:// to tcp:// everything seem to work. Not sure > why > > it's not working, perhaps order in which things are started? I am > starting > > in this order: > > > > 1) Bring up router/dealer -> This also connects router to dealer through > > ZMQQueue. Router is tcp and dealer is inproc > > 2) Bring up workter and connect to inproc > > > > When I change everything to tcp:// it works with exact same code and > > sequence of operations > > > > On Tue, Sep 23, 2014 at 11:16 AM, Mohit Anchlia > > wrote: > >> > >> 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.connect("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; > >> } > >> > >> > >> > > > > > > ___ > > zeromq-dev mailing list > > zeromq-dev@lists.zeromq.org > > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > > > ___ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > ___ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev
Re: [zeromq-dev] Client hang on recv
What version of ZeroMQ are you using? On Wed, Sep 24, 2014 at 8:17 PM, Mohit Anchlia wrote: > When I change from inproc:// to tcp:// everything seem to work. Not sure why > it's not working, perhaps order in which things are started? I am starting > in this order: > > 1) Bring up router/dealer -> This also connects router to dealer through > ZMQQueue. Router is tcp and dealer is inproc > 2) Bring up workter and connect to inproc > > When I change everything to tcp:// it works with exact same code and > sequence of operations > > On Tue, Sep 23, 2014 at 11:16 AM, Mohit Anchlia > wrote: >> >> 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.connect("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; >> } >> >> >> > > > ___ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > ___ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev
Re: [zeromq-dev] Client hang on recv
When I change from inproc:// to tcp:// everything seem to work. Not sure why it's not working, perhaps order in which things are started? I am starting in this order: 1) Bring up router/dealer -> This also connects router to dealer through ZMQQueue. Router is tcp and dealer is inproc 2) Bring up workter and connect to inproc When I change everything to tcp:// it works with exact same code and sequence of operations On Tue, Sep 23, 2014 at 11:16 AM, Mohit Anchlia wrote: > 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.connect("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; > } > > > > ___ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev
[zeromq-dev] Client hang on recv
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; } ___ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev