title: Camel Netty Load Balancer - No Response Received Exception
body: <p>I am running into an unexpected <code>CamelExchangeException</code> with Apache Camel, Netty4 component, and load balancing. While the code is working fine and the response is returned, Camel still throws <code>CamelExchangeException</code> on the last exchange when a Netty connection closes.</p>
  
  <pre><code> from("netty4:tcp://localhost:9090?sync=true&amp;textline=true")
        .setBody(simple("pong"))
        .setHeader(NettyConstants.NETTY_CLOSE_CHANNEL_WHEN_COMPLETE, simple("true", Boolean.class));
  
   from("timer:foo?delay=10000")
        .to("log:inbound?showAll=true")
        .process((Exchange exchange) -&gt; {
             exchange.getIn().setBody("ping");
         })
         .loadBalance(new LoadBalancer())
         .to("netty4:tcp://localhost:9090?sync=true&amp;textline=true")
         .end()
         .to("log:outbound?showAll=true");
  </code></pre>
  
  <p>Here is the load balancer</p>
  
  <pre><code>public class LoadBalancer extends SimpleLoadBalancerSupport {
      @Override
      public void process(Exchange exchange) throws Exception {
          this.getProcessors().get(0).process(exchange);
      }
  }
  </code></pre>
  
  <p>Exception</p>
  
  <pre><code>org.apache.camel.CamelExchangeException: No response received from remote server: localhost:9090. Exchange[ID-DESKTOP-6JJUOT9-1529441233240-0-21]
  at org.apache.camel.component.netty4.handlers.ClientChannelHandler.channelInactive(ClientChannelHandler.java:133)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
  at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
  at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:75)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
  at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
  at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:377)
  at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:342)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
  at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
  at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1409)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
  at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:927)
  at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:822)
  at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
  at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
  at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
  at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  
  <p>The same exception is not thrown if load balancer is taken out or connection is to remain open.</p>
  
  <p>Camel version 2.21.1</p>