Betrachten Sie die folgenden Initialisierungen von OkHttp und Retrofit:Okhttp ignoriert Dispatcher Einstellung verwendet wird, wenn mit Retrofit 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()
}
Beim Testen der Rest nennt, habe ich bemerkt, dass Okhttp nicht die setMaxRequestsPerHost oder setMaxRequests Einstellungen nicht einlöst an alle. Hier ist das Protokoll von 3 Anfragen, die gleichzeitig versendet werden:
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)
wo XXX ist die gleiche Domäne, 1/2/3 sind verschiedene Pfade.
Ich bin mir nicht sicher, warum, aber ich dachte, dass dies möglicherweise mit dem RxJava Scheduler Set in addCallAdapterFactory zu tun hat.
Ist das ein Fehler? oder verpasse ich etwas?
Ich benutze okhttp 3.4.1 und nachrüsten 2.1.0.
Haben Sie überprüft, wie viele http-Clients Sie erstellen? –