[zeromq-dev] Client hang on recv
Pieter Hintjens
ph at imatix.com
Wed Sep 24 21:12:12 CEST 2014
What version of ZeroMQ are you using?
On Wed, Sep 24, 2014 at 8:17 PM, Mohit Anchlia <mohitanchlia at gmail.com> 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 <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.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 at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
More information about the zeromq-dev
mailing list