Я встретил странное поведение Spring WebClient. У меня есть два URL, медленный и быстрый. Бот ничего не делает, но медленный, просто подождите десять секунд до ответа. Когда я вызываю их одновременно с помощью WebClient, я ожидаю, что быстрый URL будет завершен раньше, чем медленный, но на самом деле они оба завершены одновременно. И что хуже всего - иногда это работает, как ожидалось. Кто-нибудь задумывался, почему он действует таким образом и как заставить его работать правильно? Вот мой пример
fun main() {
val webClient = WebClient.create()
println("${LocalDateTime.now()} [${Thread.currentThread().name}] Start")
webClient.get().uri("http://callback-mock/slow-url").exchange()
.subscribe { response ->
println("${LocalDateTime.now()} [${Thread.currentThread().name}] Executed callback slow URL with result ${response.statusCode()}")
}
webClient.get().uri("http://callback-mock/fast-url").exchange()
.subscribe { response ->
println("${LocalDateTime.now()} [${Thread.currentThread().name}] Executed callback fast URL with result ${response.statusCode()}")
}
println("${LocalDateTime.now()} [${Thread.currentThread().name}] Waiting for exit")
Thread.sleep(15_000)
println("${LocalDateTime.now()} [${Thread.currentThread().name}] Exit")
}
Результат (в большинстве случаев)
2019-10-02T13:04:34.536 [main] Start
2019-10-02T13:04:35.173 [main] Waiting for exit
2019-10-02T13:04:44.791 [reactor-http-nio-4] Executed callback slow URL with result 200 OK
2019-10-02T13:04:44.791 [reactor-http-nio-2] Executed callback fast URL with result 200 OK
2019-10-02T13:04:50.193 [main] Exit
Process finished with exit code 0
В редких случаях он работает как ожидалось
2019-10-02T13:23:35.619 [main] Start
2019-10-02T13:23:36.300 [main] Waiting for exit
2019-10-02T13:23:36.802 [reactor-http-nio-2] Executed callback fast URL with result 200 OK
2019-10-02T13:23:45.810 [reactor-http-nio-4] Executed callback slow URL with result 200 OK
2019-10-02T13:23:51.308 [main] Exit
Process finished with exit code 0