我在java服务上使用retrofit2连接到REST API并获取数据。
代码如下所示:
Retrofit retrofit =
new Retrofit.Builder().baseUrl(endPoint).addConverterFactory(JacksonConverterFactory.create())
.build();
SyncCentralLojaProxySvc svc = retrofit.create(SyncCentralLojaProxySvc.class);
LogVerCentralLojaEntity entity = syncSvc.getLogVerByCdFilial(filial);
long cd_log = (entity != null) ? entity.getCdLog() : 0;
Call<LogCentralLojaCompactoCollectionDto> call = svc.getLogCompacto(filial, cd_log);
Response<LogCentralLojaCompactoCollectionDto> response = call.execute();
//NOT_MODIFIED
if (response.code() == 304) {
return 0;
}
if (!response.isSuccessful())
throw new IOException(response.errorBody().string());
LogCentralLojaCompactoCollectionDto body = response.body();
它是一个简单的数据提取,每隔几秒就会同步(不是并行)运行。
我注意到VisualVM上的OkHttp thredas增长太多了。该应用程序永远不会并行使用100个操作。事实上,它只需要一个。
我该如何调整?拥有这么多线程是很自然的吗?
答案 0 :(得分:6)
使用连接池配置设置全局客户端解决了以下问题:
ConnectionPool pool = new ConnectionPool(5, 10000, TimeUnit.MILLISECONDS);
OkHttpClient client = new OkHttpClient.Builder()
.connectionPool(pool)
.build();
Retrofit retrofit =
new Retrofit.Builder().baseUrl(endPoint)
.client(client)
.addConverterFactory(JacksonConverterFactory.create())
.build();
答案 1 :(得分:2)
这不正常。您是在创建一个Retrofit实例并重新使用它吗?或者每个请求创建一个?