blob: 78a12d099cc7b20c16543911b5a977537ff5975d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicecomb.foundation.vertx.client.http;
import org.apache.servicecomb.foundation.common.encrypt.Encryptions;
import org.apache.servicecomb.foundation.vertx.VertxTLSBuilder;
import io.vertx.core.http.HttpClientOptions;
import io.vertx.core.http.HttpVersion;
import io.vertx.core.net.ProxyOptions;
/**
* common Http Client Options must be set by implementations
*/
public interface HttpClientOptionsSPI {
/* unique name in this service */
String clientName();
/* loading order */
int getOrder();
/* can turn off the client */
boolean enabled();
/* config tag is used for group configurations, like ssl, address resolver, etc. set config tag to distinguish
* other clients configuration or read the common configuration. */
String getConfigTag();
/***************** vert.x common settings ***************************/
int getEventLoopPoolSize();
boolean useSharedVertx();
/***************** vert.x vertical common settings ***************************/
int getInstanceCount();
boolean isWorker();
String getWorkerPoolName();
int getWorkerPoolSize();
/***************** http common settings ***************************/
HttpVersion getHttpVersion();
int getConnectTimeoutInMillis();
int getIdleTimeoutInSeconds();
boolean isTryUseCompression();
int getMaxWaitQueueSize();
int getMaxPoolSize();
boolean isKeepAlive();
int getMaxHeaderSize();
int getKeepAliveTimeout();
boolean enableLogActivity();
/***************** http 2 settings ****************************/
int getHttp2MultiplexingLimit();
int getHttp2MaxPoolSize();
boolean isUseAlpn();
/***************** proxy settings ***************************/
boolean isProxyEnable();
String getProxyHost();
int getProxyPort();
String getProxyUsername();
String getProxyPassword();
/***************** ssl settings ***************************/
boolean isSsl();
static HttpClientOptions createHttpClientOptions(HttpClientOptionsSPI spi) {
HttpClientOptions httpClientOptions = new HttpClientOptions();
httpClientOptions.setProtocolVersion(spi.getHttpVersion());
httpClientOptions.setConnectTimeout(spi.getConnectTimeoutInMillis());
httpClientOptions.setIdleTimeout(spi.getIdleTimeoutInSeconds());
httpClientOptions.setTryUseCompression(spi.isTryUseCompression());
httpClientOptions.setMaxWaitQueueSize(spi.getMaxWaitQueueSize());
httpClientOptions.setMaxPoolSize(spi.getMaxPoolSize());
httpClientOptions.setKeepAlive(spi.isKeepAlive());
httpClientOptions.setMaxHeaderSize(spi.getMaxHeaderSize());
httpClientOptions.setLogActivity(spi.enableLogActivity());
if (spi.isProxyEnable()) {
ProxyOptions proxy = new ProxyOptions();
proxy.setHost(spi.getProxyHost());
proxy.setPort(spi.getProxyPort());
proxy.setUsername(spi.getProxyUsername());
proxy.setPassword(
Encryptions.decode(spi.getProxyPassword(), spi.getConfigTag()));
httpClientOptions.setProxyOptions(proxy);
}
if (spi.getHttpVersion() == HttpVersion.HTTP_2) {
httpClientOptions.setUseAlpn(spi.isUseAlpn());
httpClientOptions.setHttp2ClearTextUpgrade(false);
httpClientOptions.setHttp2MultiplexingLimit(spi.getHttp2MultiplexingLimit());
httpClientOptions.setHttp2MaxPoolSize(spi.getHttp2MaxPoolSize());
httpClientOptions.setHttp2KeepAliveTimeout(spi.getKeepAliveTimeout());
} else {
httpClientOptions.setKeepAliveTimeout(spi.getKeepAliveTimeout());
}
if (spi.isSsl()) {
VertxTLSBuilder.buildHttpClientOptions(spi.getConfigTag(), httpClientOptions);
}
return httpClientOptions;
}
}