diff --git a/java/client/src/main/java/org/apache/rocketmq/client/java/rpc/RpcClientImpl.java b/java/client/src/main/java/org/apache/rocketmq/client/java/rpc/RpcClientImpl.java index a40cd3989..5c7074514 100644 --- a/java/client/src/main/java/org/apache/rocketmq/client/java/rpc/RpcClientImpl.java +++ b/java/client/src/main/java/org/apache/rocketmq/client/java/rpc/RpcClientImpl.java @@ -64,6 +64,9 @@ public class RpcClientImpl implements RpcClient { private static final int CONNECT_TIMEOUT_MILLIS = 3 * 1000; + // the grpc server default permitted min keep alive is 5min, so by default we should not less than 5min. + private static final int KEEP_ALIVE_TIME_MILLIS = 300 * 1000; + private static final int KEEP_ALIVE_TIMEOUT_MILLIS = 30 * 1000; private static final int GRPC_MAX_MESSAGE_SIZE = Integer.MAX_VALUE; private final ManagedChannel channel; @@ -77,6 +80,9 @@ public RpcClientImpl(Endpoints endpoints, boolean sslEnabled) throws SSLExceptio final NettyChannelBuilder channelBuilder = NettyChannelBuilder.forTarget(endpoints.getGrpcTarget()) .withOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, CONNECT_TIMEOUT_MILLIS) + .keepAliveTime(KEEP_ALIVE_TIME_MILLIS, TimeUnit.MILLISECONDS) + .keepAliveTimeout(KEEP_ALIVE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) + .keepAliveWithoutCalls(true) .maxInboundMessageSize(GRPC_MAX_MESSAGE_SIZE) .intercept(LoggingInterceptor.getInstance());