[zeromq-dev] Client hang on recv
Stephen Riesenberg
stephen.riesenberg at gmail.com
Wed Oct 1 21:09:28 CEST 2014
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 <mohitanchlia at 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.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 at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20141001/d79a2b0f/attachment.htm>
More information about the zeromq-dev
mailing list