Я определил два API HTTP GET / test-mono и / test-no-mono, оба они точно такие же, за исключением того, что / test-mono использует тип возврата Mono. HelloControllerSpec тестирует оба API 1000 раз с использованием пула потоков 100, а / test-no-mono занимает 45 секунд, но / test-mono занимает более 4 минут, почему? Похоже, что в конфигурации параллелизма по умолчанию / test-no-mono намного лучше, чем /test-mono.
Полный код на https://github.com/soumitrak/micronaut-server
@Controller("/")
class HelloController {
@Get("test-mono/{id}", produces = arrayOf(MediaType.APPLICATION_JSON))
fun test_mono(id: String): Mono<String> {
Thread.sleep(4000)
return Mono.just("Hello World! $id")
}
@Get("test-no-mono/{id}", produces = arrayOf(MediaType.APPLICATION_JSON))
fun test_no_mono(id: String): String {
Thread.sleep(4000)
return "Hello World! $id"
}
}
$ ./gradlew clean test
Задание: тест
sk.test.server.HelloControllerSpec STANDARD_OUT
09:37:32.473 [Test worker] INFO i.m.context.env.DefaultEnvironment - Established active environments: [test]
sk.test.server.HelloControllerSpec> using Mono STANDARD_OUT
09:37:34.262 [Test worker] INFO sk.test.server.HelloControllerSpec - Tests using mono
09:41:46.972 [Test worker] INFO sk.test.server.HelloControllerSpec - Done tests using mono
Тесты выполняются через> 4 минуты
sk.test.server.HelloControllerSpec> без моно STANDARD_OUT
09:41:46.975 [Test worker] INFO sk.test.server.HelloControllerSpec - Tests without mono
09:42:27.216 [Test worker] INFO sk.test.server.HelloControllerSpec - Done tests without mono
Те же тесты за 45 секунд.
В чем причина "/ test-mono" медленная и как я могу улучшить производительность этого API?