下面列出了怎么用org.springframework.http.client.OkHttp3ClientHttpRequestFactory的API类实例代码及写法,或者点击链接到github查看源代码。
private void start(final HttpConfig httpConfig) {
// init RestTemplate
OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory();
factory.setConnectTimeout((int) this.connectionTimeout.toMillis());
factory.setReadTimeout((int) HttpConstants.CLIENT_POLLING_READ_TIMEOUT);
this.httpClient = new RestTemplate(factory);
// It could be initialized multiple times, so you need to control that.
if (RUNNING.compareAndSet(false, true)) {
// fetch all group configs.
this.fetchGroupConfig(ConfigGroupEnum.values());
// one thread for listener, another one for fetch configuration data.
this.executor = new ThreadPoolExecutor(3, 3, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(),
SoulThreadFactory.create("http-long-polling", true));
// start long polling.
this.executor.execute(new HttpLongPollingTask());
} else {
log.info("soul http long polling was started, executor=[{}]", executor);
}
}
@Test
public void createClientHttpRequestFactory() {
ClientOptions clientOptions = mock(ClientOptions.class);
SslConfiguration sslConfiguration = mock(SslConfiguration.class);
SslConfiguration.KeyStoreConfiguration keyStoreConfiguration = mock(SslConfiguration.KeyStoreConfiguration.class);
when(sslConfiguration.getKeyStoreConfiguration()).thenReturn(keyStoreConfiguration);
when(sslConfiguration.getTrustStoreConfiguration()).thenReturn(keyStoreConfiguration);
when(clientOptions.getConnectionTimeout()).thenReturn(Duration.ZERO);
when(clientOptions.getReadTimeout()).thenReturn(Duration.ZERO);
ClientHttpRequestFactory result = util.createClientHttpRequestFactory(clientOptions, sslConfiguration);
assertThat(result).isInstanceOf(OkHttp3ClientHttpRequestFactory.class);
}
@Bean
@Lazy
@ConditionalOnMissingBean
public RestTemplateBuilder restTemplateBuilder(ObjectProvider<HttpMessageConverters> messageConverters,
ObjectProvider<RestTemplateCustomizer> restTemplateCustomizers,
ObjectProvider<RestTemplateRequestCustomizer<?>> restTemplateRequestCustomizers,
OkHttpClient okHttpClient) {
RestTemplateBuilder builder = new RestTemplateBuilder();
HttpMessageConverters converters = messageConverters.getIfUnique();
if (converters != null) {
builder = builder.messageConverters(converters.getConverters());
}
builder = addCustomizers(builder, restTemplateCustomizers, RestTemplateBuilder::customizers);
builder = addCustomizers(builder, restTemplateRequestCustomizers, RestTemplateBuilder::requestCustomizers);
builder = builder.requestFactory(() -> new OkHttp3ClientHttpRequestFactory(okHttpClient));
return builder;
}
@Bean
@Lazy
@ConditionalOnMissingBean
public RestTemplateBuilder restTemplateBuilder(ObjectProvider<HttpMessageConverters> messageConverters,
ObjectProvider<RestTemplateCustomizer> restTemplateCustomizers,
ObjectProvider<RestTemplateRequestCustomizer<?>> restTemplateRequestCustomizers,
OkHttpClient okHttpClient) {
RestTemplateBuilder builder = new RestTemplateBuilder();
HttpMessageConverters converters = messageConverters.getIfUnique();
if (converters != null) {
builder = builder.messageConverters(converters.getConverters());
}
builder = addCustomizers(builder, restTemplateCustomizers, RestTemplateBuilder::customizers);
builder = addCustomizers(builder, restTemplateRequestCustomizers, RestTemplateBuilder::requestCustomizers);
builder = builder.requestFactory(() -> new OkHttp3ClientHttpRequestFactory(okHttpClient));
return builder;
}
@Override
public RestExecutor createRestExecutor() {
RestExecutorConfig config = this.restExecutorConfig;
if(config==null){
config = new RestExecutorConfig();
}
ExtRestTemplate restTemplate = null;
if(RestUtils.isOkHttp3Present()){
OkHttp3ClientHttpRequestFactory requestFactory = new OkHttp3ClientHttpRequestFactory();
requestFactory.setConnectTimeout(config.getConnectTimeout());
requestFactory.setReadTimeout(config.getReadTimeout());
requestFactory.setWriteTimeout(config.getWriteTimeout());
restTemplate = new ExtRestTemplate(requestFactory);
}else{
restTemplate = new ExtRestTemplate();
}
return restTemplate;
}
@SuppressWarnings("deprecation")
@Parameters
public static Iterable<? extends ClientHttpRequestFactory> data() {
return Arrays.asList(
new SimpleClientHttpRequestFactory(),
new HttpComponentsClientHttpRequestFactory(),
new org.springframework.http.client.Netty4ClientHttpRequestFactory(),
new OkHttp3ClientHttpRequestFactory()
);
}
@SuppressWarnings("deprecation")
@Parameters
public static Iterable<? extends ClientHttpRequestFactory> data() {
return Arrays.asList(
new SimpleClientHttpRequestFactory(),
new HttpComponentsClientHttpRequestFactory(),
new Netty4ClientHttpRequestFactory(),
new OkHttp3ClientHttpRequestFactory()
);
}
@Parameterized.Parameters()
public static Iterable<Supplier<ClientHttpRequestFactory>> data() {
return Arrays.asList(
SimpleClientHttpRequestFactory::new,
OkHttp3ClientHttpRequestFactory::new,
HttpComponentsClientHttpRequestFactory::new);
}
@Test
public void okHttp3ClientCreated() throws Exception {
ClientHttpRequestFactory factory = OkHttp3.usingOkHttp3(new ClientOptions());
assertThat(factory).isInstanceOf(OkHttp3ClientHttpRequestFactory.class);
((DisposableBean) factory).destroy();
}
@Override
public ClientHttpRequestFactory createRequestFactory(TimeoutConfiguration configuration) {
OkHttp3ClientHttpRequestFactory requestFactory = new OkHttp3ClientHttpRequestFactory(httpClient);
requestFactory.setConnectTimeout(toMillis(configuration.getConnection()));
requestFactory.setReadTimeout(toMillis(configuration.getRead()));
requestFactory.setWriteTimeout(toMillis(configuration.getWrite()));
return requestFactory;
}
private static void subscriptionListenSpringAdapter(ObjectMapper objectMapper, Listener<SalesOrderPlaced> listener) throws IOException {
final OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(2, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(2, 5*60, TimeUnit.SECONDS))
.certificatePinner(new CertificatePinner.Builder()
.add(NAKADI_URI.getHost(), "sha256/KMUmME9xy7BKVUZ80VcmQ75zIZo16IZRTqVRYHVZeWY=")
.build())
.build();
final OkHttp3ClientHttpRequestFactory clientHttpRequestFactory = new OkHttp3ClientHttpRequestFactory(client);
final SpringRequestFactory requestFactory = new SpringRequestFactory(clientHttpRequestFactory);
final NakadiClient nakadiClient = NakadiClient.builder(NAKADI_URI)
.withRequestFactory(requestFactory)
.withAccessTokenProvider(new ZignAccessTokenProvider())
.build();
final Subscription subscription = nakadiClient.subscription("fahrschein-demo", SALES_ORDER_SERVICE_ORDER_PLACED)
.withConsumerGroup("fahrschein-demo")
.readFromEnd()
.subscribe();
nakadiClient.stream(subscription)
.withObjectMapper(objectMapper)
.listen(SalesOrderPlaced.class, listener);
}
protected RestTemplate createRestTemplate() {
Timeout timeout = recaptcha.getValidation().getTimeout();
OkHttp3ClientHttpRequestFactory requestFactory = new OkHttp3ClientHttpRequestFactory();
requestFactory.setConnectTimeout(toMilliseconds(timeout.getConnect()));
requestFactory.setReadTimeout(toMilliseconds(timeout.getRead()));
requestFactory.setWriteTimeout(toMilliseconds(timeout.getWrite()));
return new RestTemplate(requestFactory);
}
@Override protected RestTemplate newClient(HttpTracing httpTracing) {
OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory(ok);
RestTemplate result = new RestTemplate(factory);
result.setInterceptors(Collections.singletonList(
TracingClientHttpRequestInterceptor.create(httpTracing
)));
return result;
}
@Override protected AsyncRestTemplate newClient(HttpTracing httpTracing) {
OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory(ok);
AsyncRestTemplate result = new AsyncRestTemplate(factory);
result.setInterceptors(Collections.singletonList(
TracingAsyncClientHttpRequestInterceptor.create(httpTracing
)));
return result;
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
static ClientHttpRequestFactory usingOkHttp3(ClientOptions options, SslConfiguration sslConfiguration)
throws GeneralSecurityException, IOException {
Builder builder = new Builder();
if (hasSslConfiguration(sslConfiguration)) {
TrustManager[] trustManagers = getTrustManagers(sslConfiguration);
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException(
"Unexpected default trust managers:" + Arrays.toString(trustManagers));
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
SSLContext sslContext = getSSLContext(sslConfiguration, trustManagers);
builder.sslSocketFactory(sslContext.getSocketFactory(), trustManager);
}
builder.connectTimeout(options.getConnectionTimeout().toMillis(), TimeUnit.MILLISECONDS)
.readTimeout(options.getReadTimeout().toMillis(), TimeUnit.MILLISECONDS);
return new OkHttp3ClientHttpRequestFactory(builder.build());
}
@Bean
public OkHttp3ClientHttpRequestFactory okHttp3ClientHttpRequestFactory(OkHttpClient okHttpClient) {
OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory(okHttpClient);
return factory;
}
public ExtRestTemplate(){
this(RestUtils.isOkHttp3Present()?new OkHttp3ClientHttpRequestFactory():null);
}
@Override protected RestTemplate newClient() {
return new RestTemplate(new OkHttp3ClientHttpRequestFactory(ok));
}
@Override protected AsyncRestTemplate newClient() {
return new AsyncRestTemplate(new OkHttp3ClientHttpRequestFactory(ok));
}
@Test
void okHttp3ClientShouldWork() throws Exception {
ClientHttpRequestFactory factory = OkHttp3.usingOkHttp3(new ClientOptions(), Settings.createSslConfiguration());
RestTemplate template = new RestTemplate(factory);
String response = request(template);
assertThat(factory).isInstanceOf(OkHttp3ClientHttpRequestFactory.class);
assertThat(response).isNotNull().contains("initialized");
((DisposableBean) factory).destroy();
}