|
@@ -33,6 +33,9 @@ import io.grpc.stub.MetadataUtils;
|
|
|
import io.milvus.client.MilvusServiceClient;
|
|
|
import io.milvus.grpc.*;
|
|
|
import io.milvus.v2.client.ConnectConfig;
|
|
|
+import io.grpc.HttpConnectProxiedSocketAddress;
|
|
|
+import io.grpc.ProxiedSocketAddress;
|
|
|
+import io.grpc.ProxyDetector;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
import org.slf4j.Logger;
|
|
@@ -46,6 +49,8 @@ import java.nio.charset.StandardCharsets;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Base64;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
+import java.net.InetSocketAddress;
|
|
|
+import java.net.SocketAddress;
|
|
|
|
|
|
public class ClientUtils {
|
|
|
Logger logger = LoggerFactory.getLogger(ClientUtils.class);
|
|
@@ -73,6 +78,11 @@ public class ClientUtils {
|
|
|
.keepAliveWithoutCalls(connectConfig.isKeepAliveWithoutCalls())
|
|
|
.idleTimeout(connectConfig.getIdleTimeoutMs(), TimeUnit.MILLISECONDS)
|
|
|
.intercept(MetadataUtils.newAttachHeadersInterceptor(metadata));
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(connectConfig.getProxyAddress())) {
|
|
|
+ configureProxy(builder, connectConfig.getProxyAddress());
|
|
|
+ }
|
|
|
+
|
|
|
if(connectConfig.isSecure()) {
|
|
|
builder.useTransportSecurity();
|
|
|
}
|
|
@@ -95,6 +105,11 @@ public class ClientUtils {
|
|
|
.keepAliveWithoutCalls(connectConfig.isKeepAliveWithoutCalls())
|
|
|
.idleTimeout(connectConfig.getIdleTimeoutMs(), TimeUnit.MILLISECONDS)
|
|
|
.intercept(MetadataUtils.newAttachHeadersInterceptor(metadata));
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(connectConfig.getProxyAddress())) {
|
|
|
+ configureProxy(builder, connectConfig.getProxyAddress());
|
|
|
+ }
|
|
|
+
|
|
|
if(connectConfig.isSecure()){
|
|
|
builder.useTransportSecurity();
|
|
|
}
|
|
@@ -102,7 +117,7 @@ public class ClientUtils {
|
|
|
} else if (StringUtils.isNotEmpty(connectConfig.getClientPemPath())
|
|
|
&& StringUtils.isNotEmpty(connectConfig.getClientKeyPath())
|
|
|
&& StringUtils.isNotEmpty(connectConfig.getCaPemPath())) {
|
|
|
- // tow-way tls
|
|
|
+ // two-way tls
|
|
|
SslContext sslContext = GrpcSslContexts.forClient()
|
|
|
.trustManager(new File(connectConfig.getCaPemPath()))
|
|
|
.keyManager(new File(connectConfig.getClientPemPath()), new File(connectConfig.getClientKeyPath()))
|
|
@@ -116,6 +131,11 @@ public class ClientUtils {
|
|
|
.keepAliveWithoutCalls(connectConfig.isKeepAliveWithoutCalls())
|
|
|
.idleTimeout(connectConfig.getIdleTimeoutMs(), TimeUnit.MILLISECONDS)
|
|
|
.intercept(MetadataUtils.newAttachHeadersInterceptor(metadata));
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(connectConfig.getProxyAddress())) {
|
|
|
+ configureProxy(builder, connectConfig.getProxyAddress());
|
|
|
+ }
|
|
|
+
|
|
|
if (connectConfig.getSecure()) {
|
|
|
builder.useTransportSecurity();
|
|
|
}
|
|
@@ -133,6 +153,9 @@ public class ClientUtils {
|
|
|
.keepAliveWithoutCalls(connectConfig.isKeepAliveWithoutCalls())
|
|
|
.idleTimeout(connectConfig.getIdleTimeoutMs(), TimeUnit.MILLISECONDS)
|
|
|
.intercept(MetadataUtils.newAttachHeadersInterceptor(metadata));
|
|
|
+ if (StringUtils.isNotEmpty(connectConfig.getProxyAddress())) {
|
|
|
+ configureProxy(builder, connectConfig.getProxyAddress());
|
|
|
+ }
|
|
|
if(connectConfig.isSecure()){
|
|
|
builder.useTransportSecurity();
|
|
|
}
|
|
@@ -145,6 +168,30 @@ public class ClientUtils {
|
|
|
return channel;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Configures the proxy settings for a NettyChannelBuilder if proxy address is specified
|
|
|
+ *
|
|
|
+ * @param builder NettyChannelBuilder to configure
|
|
|
+ * @param connectConfig Connection configuration containing proxy settings
|
|
|
+ */
|
|
|
+ public static void configureProxy(ManagedChannelBuilder builder, String proxyAddress) {
|
|
|
+ String[] hostPort = proxyAddress.split(":");
|
|
|
+ if (hostPort.length == 2) {
|
|
|
+ String proxyHost = hostPort[0];
|
|
|
+ int proxyPort = Integer.parseInt(hostPort[1]);
|
|
|
+
|
|
|
+ builder.proxyDetector(new ProxyDetector() {
|
|
|
+ @Override
|
|
|
+ public ProxiedSocketAddress proxyFor(SocketAddress targetServerAddress) {
|
|
|
+ return HttpConnectProxiedSocketAddress.newBuilder()
|
|
|
+ .setProxyAddress(new InetSocketAddress(proxyHost, proxyPort))
|
|
|
+ .setTargetAddress((InetSocketAddress) targetServerAddress)
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private static JdkSslContext convertJavaSslContextToNetty(ConnectConfig connectConfig) {
|
|
|
ApplicationProtocolConfig applicationProtocolConfig = new ApplicationProtocolConfig(ApplicationProtocolConfig.Protocol.NONE,
|
|
|
ApplicationProtocolConfig.SelectorFailureBehavior.FATAL_ALERT, ApplicationProtocolConfig.SelectedListenerFailureBehavior.FATAL_ALERT);
|