diff --git a/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java b/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java index 10b3ee63178..928c29334ee 100644 --- a/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java +++ b/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java @@ -88,9 +88,9 @@ public GrpcClientFactory setNameResolverFactory(NameResolver.Factory value) { */ @Override public RpcClient create(Context ctx, String target) { - NettyChannelBuilder channel = NettyChannelBuilder.forTarget(target) - .negotiationType(NegotiationType.PLAINTEXT) - .intercept(new RetryingInterceptor(config)); + NettyChannelBuilder channel = channelBuilder(target) + .negotiationType(NegotiationType.PLAINTEXT) + .intercept(new RetryingInterceptor(config)); if (loadBalancerFactory != null) { channel.loadBalancerFactory(loadBalancerFactory); } @@ -98,7 +98,29 @@ public RpcClient create(Context ctx, String target) { channel.nameResolverFactory(nameResolverFactory); } return callCredentials != null ? - new GrpcClient(channel.build(), callCredentials) : new GrpcClient(channel.build()); + new GrpcClient(channel.build(), callCredentials) : new GrpcClient(channel.build()); + } + + /** + *

This method constructs NettyChannelBuilder object that will be used to create RpcClient.

+ *

Subclasses may override this method to make adjustments to the builder

+ * for example: + * + * @Override + * protected NettyChannelBuilder channelBuilder(String target) { + * return super.channelBuilder(target) + * .eventLoopGroup(new EpollEventLoopGroup()) + * .withOption(EpollChannelOption.TCP_USER_TIMEOUT,30); + * } + * + * + * + * @param target + * target is passed to NettyChannelBuilder which will resolve based on scheme, by default dns. + * @return + */ + protected NettyChannelBuilder channelBuilder(String target){ + return NettyChannelBuilder.forTarget(target); } /** @@ -152,7 +174,7 @@ public RpcClient createTls(Context ctx, String target, TlsOptions tlsOptions) { } return new GrpcClient( - NettyChannelBuilder.forTarget(target).negotiationType(NegotiationType.TLS).sslContext(sslContext).intercept(new RetryingInterceptor(config)).build()); + channelBuilder(target).negotiationType(NegotiationType.TLS).sslContext(sslContext).intercept(new RetryingInterceptor(config)).build()); } /**