Je commence un nouveau projet dans la JVM avec beaucoup d'E/S. À un moment donné, je dois enregistrer des éléments dans une base de données Mongo. Mon idée est d'utiliser une approche non bloquante avec les coroutines Kotlin.

Je sais qu'il existe un pilote de flux réactifs officiel pour Mongo et que le support semble bon. Mais dans ce cas, j'aurais besoin de "créer des ponts" entre les ruisseaux et les coroutines. Ma question concerne ce point : est-ce que quelqu'un connait une manière meilleure ou plus simple de le faire ?

4
Fabiano 10 févr. 2020 à 23:10

1 réponse

Meilleure réponse

Jetez un œil au projet KMongo. Il a le support des coroutines :

import org.litote.kmongo.reactivestreams.*  //NEEDED! import KMongo reactivestreams extensions
import org.litote.kmongo.coroutine.* //NEEDED! import KMongo coroutine extensions

data class Jedi(val name: String, val age: Int)

val client = KMongo.createClient().coroutine //use coroutine extension
val database = client.getDatabase("test") //normal java driver usage
val col = database.getCollection<Jedi>() //KMongo extension method

//async now
runBlocking {
    col.insertOne(Jedi("Luke Skywalker", 19))

    val yoda : Jedi? = col.findOne(Jedi::name eq "Yoda")

    (...)
}
3
madhead 11 févr. 2020 à 08:57