Kotlin coroutines и Spring Framework 5 реактивные типы

Kotlin coroutines позволяют выполнять неблокирующий код, возвращая Deferred значение. Это действительно полезно для создания неблокирующего кода при использовании методов блокировки (например, из библиотеки).

Spring 5 позволяет использовать Mono и Flux в каркасе. Большой интерес, который я вижу, это возможность сериализации экземпляров этих двух типов и отправить его обратно в ответ, когда кто-то вызывает конечную точку контроллера.

Одна из важных точек весны 5 – иметь определенную поддержку для Kotlin (роутер, декларация бобов, …), но я не могу найти информацию о возможных взаимодействиях между сопрограммами Kotlin и реактивными типами Spring 5.

Есть ли способ сочетать преимущества этих функций?

  • преобразование Deferred в Mono / Flux ?
  • с использованием метода Deferred ответа типа Spring контроллера?

Если нет, то в каких случаях coroutine имеет смысл, если у нас есть весенние 5 реактивных типов?

Coroutines обеспечивает поддержку Reactor Core 3.1, используемого в Spring Framework 5, по состоянию на kotlinx.coroutines 0.19.1 .

Spring Framework 5 Поддержка Coroutines в настоящее время находится в процессе разработки в качестве эксперимента в проекте сообщества spring-kotlin-coroutine . Такая поддержка еще не запланирована для интеграции в Spring Framework 5 изначально, но есть SPR-15413, за которым вы можете следить и в конечном итоге голосовать. За ваши вопросы относительно того, как Flux и Mono вписываются в мир Coroutines, см. Этот комментарий .

Имейте в виду, что Coroutines все еще являются экспериментальными, и плюсы и минусы должны быть тщательно оценены, прежде чем принимать решение официально поддержать их или нет. Также у Bridging Reactive и Coroutines есть некоторые ограничения, особенно при поддержке противодавления (Coroutines запускает ранний запрос и может выполнять только request(1) ).

На стороне JVM также, вероятно, неплохо увидеть, как будет развиваться Project Loom , и как его можно использовать в экосистемах Reactive и Coroutines.