Rozważmy następujące inicjacji z OkHttp i modernizowanych:Okhttp ignoruje Dispatcher ustawienie w przypadku korzystania z modernizowanych RxJavaCallAdapterFactory
public static SomeServiceRestInterface newRestService(String apiUrl) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(apiUrl)
.client(createOkHttpClient())
.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.addConverterFactory(createGsonConverter())
.build();
return retrofit.create(SomeServiceRestInterface.class);
}
private static OkHttpClient createOkHttpClient() {
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequestsPerHost(1);
dispatcher.setMaxRequests(1);
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.dispatcher(dispatcher).build()
}
Testując reszta połączeń, zauważyłem, że Okhttp nie honoruje ustawienia setMaxRequestsPerHost lub setMaxRequests na wszystko. Oto dziennik z 3 żądaniami wysłanymi jednocześnie:
23/07 04:14:22.668 [RxIoScheduler-4] DEBUG - --> POST https://XXX/1 http/1.1
23/07 04:14:22.668 [RxIoScheduler-4] DEBUG - Content-Length: 0
23/07 04:14:22.668 [RxIoScheduler-4] DEBUG - --> END POST (0-byte body)
23/07 04:14:22.672 [RxIoScheduler-7] DEBUG - --> POST https://XXX/2 http/1.1
23/07 04:14:22.673 [RxIoScheduler-7] DEBUG - Content-Length: 0
23/07 04:14:22.673 [RxIoScheduler-7] DEBUG - --> END POST (0-byte body)
23/07 04:14:22.676 [RxIoScheduler-6] DEBUG - --> POST https://XXX/3 http/1.1
23/07 04:14:22.677 [RxIoScheduler-6] DEBUG - Content-Length: 0
23/07 04:14:22.677 [RxIoScheduler-6] DEBUG - --> END POST (0-byte body)
gdzie XXX to ta sama domena, 1/2/3 to różne ścieżki.
Nie jestem pewien dlaczego, ale myślałem, że to może mieć związek z zestawem RxJava Scheduler w addCallAdapterFactory.
Czy to błąd? czy coś mi brakuje?
Używam okhttp 3.4.1, i modernizuję 2.1.0.
Czy sprawdziłeś liczbę utworzonych klientów? –