brainlag / JavaNSQClient

Fast Java client for NSQ
MIT License
90 stars 57 forks source link

Bug while connection close gives an exception #43

Open jayantjain93 opened 6 years ago

jayantjain93 commented 6 years ago

While doing a connection close, there is an Channel Inactive which is un-caught. Hence, the connection is not removed. So I'm left with a stale connection, and not able to reconnect due to an existing entry to that address.

Logs: 16:14:47.245 INFO Remove connection server:4150 - NSQConsumer.connect 16:14:47.245 INFO Closing connection: com.github.brainlag.nsq.Connection@188fe003 - Connection.close 16:14:47.246 INFO Channel disconnected! com.github.brainlag.nsq.Connection@188fe003 - NSQHandler.channelInactive

Fix could be to put in try catch

        for (final ServerAddress server : Sets.difference(oldAddresses, newAddresses)) {
            LogManager.getLogger(this).info("Remove connection " + server.toString());                
           try {
                   connections.get(server).close();
          } catch (Exception e) {
                LogManager.getLogger(this).error("Close connection failed: " + e.getMessage(), e);
           } finally {
            connections.remove(server);
           }
        }

https://github.com/brainlag/JavaNSQClient/blob/d0e6612afac2731d0ed10ff5b12f75429149db48/src/main/java/com/github/brainlag/nsq/NSQConsumer.java#L204