iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0

在 Java 這邊有很多 Reactive 的 framework, 早期有 RxJava, Spring 的選擇是 Reactor, Quarkus 的選擇是 Mutiny. 是說剛剛查了一下 Mutiny 是兵變(官兵叛變)的意思 ...

所以 Quarkus 說你要用 Reactive 有兩種方法 1) Mutiny 2) Coroutines

所以我們會用 Coroutines 來幫助我們更簡單的寫出 reactive 的程式碼。不過要說的,不能因為 Kotlin 把這件事看起來變的簡單就對非同步的背景知識輕忽,reactive 的水還是滿深的。

Quarkus 的 Coroutines 實現

Quarkus 對 Coroutines 支援,底層也是利用了 Mutiny,把 Blocking IO 的操作丟去 Vertx 的 pool

支援 suspend 方法的 Extension

目前有以下的接口 extension 支援 suspend 的 function

Extension Comments
quarkus-resteasy-reactive RESTful 支援
quarkus-rest-client-reactive REST Client
quarkus-smallrye-reactive-messaging Reactive message
quarkus-scheduler 排程
quarkus-smallrye-fault-tolerance Retry, timeout 等 Annotation

Mutiny 與 Kotlin Coroutines 互轉

從接口進來的 suspend function 開始,就要一直往後 call suspend function,依 cloud native 的特性就會要接去外部服務, Quarkus 利用 Mutiny 提供很多外部 Service Reactive 的實現。這些 Reactive return 都會是 Uni<T> 或是 Multi<T> 的封裝。
在 Kotlin 這邊, Mutiny 提供了 awaitSuspending 的方法,可以直接把 Uni<T> 轉成 suspend <T> 這樣我們就可以無縫接軌,從前到後都是 suspend function。

例如今天我們想用 Panache Reactive ORM 處理 RDB delete, 只要這樣

    suspend fun deleteEntry(forecastId: Int) {
        Panache.withTransaction { delete("forecastId", forecastId) }.awaitSuspending()
    }

參考連結


上一篇
方興未艾的 Reactive 與 Quarkus - Cloud 的必須品
下一篇
測試 Quarkus 應用,用 Kotlin DSL 一目了然 - Day12
系列文
Quarkus, Kotlin, Reactive 雲原生服務開發32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言