title: how to load balance gRPC java client requests over NLB
body: <p>I am testing gRPC java client to its server over aws NLB load balancing but all traffics hit the same node. I try to understand how it would work over NLB.</p>
  
  <p>As gRPC is using persistent TCP connection, I assume its client would establish multiple tcp connections over NLB to its server and randomly serve requests to those connections?</p>
  
  <p>I am using the code from grpc.java example</p>
  
  <pre><code>ManagedChannel channel = ManagedChannelBuilder.forAddress(endPoint, port).usePlaintext().build();
  GreeterGrpc.GreeterBlockingStub blockingStub = GreeterGrpc.newBlockingStub(channel);
  response = blockingStub.sayHello(request);
  </code></pre>
  
  <p>I saw some docs said ManagedChannel encapsulates the complexity of connection pool and I suppose it will maintain connections and decide which connection to use?</p>
  
  <p>Since stub is thread safe, I guess I could reuse the same stub for all requests?</p>
  
  <p>So the problem is how I could make requests load balanced cross every server node. I ran the example over NLB but all requests hit the same node with no luck.</p>