기본 질문에 대해 미리 사과드립니다. http4s에서 스칼라를 배우기 시작했고 라우터 핸들러에서 MongoDB에 항목을 입력하려고합니다. 내가 말할 수있는 한 insertOne
은 Observable[Completed]
을 반환합니다.http4s, Service Executor 및 Mongodb : insertOne이 끝날 때까지 기다리는 방법
응답을 반환하기 전에 observalbe가 완료 될 때까지 기다릴 수있는 아이디어가 있습니까?
내 코드입니다 : 내가 https://github.com/haghard/mongo-query-streams을 권 해드립니다
class Routes {
val service: HttpService = HttpService {
case r @ GET -> Root/"hello" => {
val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("scala")
val collection: MongoCollection[Document] = database.getCollection("tests")
val doc: Document = Document("_id" -> 0, "name" -> "MongoDB", "type" -> "database",
"count" -> 1, "info" -> Document("x" -> 203, "y" -> 102))
collection.insertOne(doc)
mongoClient.close()
Ok("Hello.")
}
}
}
class GomadApp(host: String, port: Int) {
private val pool = Executors.newCachedThreadPool()
println(s"Starting server on '$host:$port'")
val routes = new Routes().service
// Add some logging to the service
val service: HttpService = routes.local { req =>
val path = req.uri
val start = System.nanoTime()
val result = req
val time = ((System.nanoTime() - start)/1000)/1000.0
println(s"${req.remoteAddr.getOrElse("null")} -> ${req.method}: $path in $time ms")
result
}
// Construct the blaze pipeline.
def build(): ServerBuilder =
BlazeBuilder
.bindHttp(port, host)
.mountService(service)
.withServiceExecutor(pool)
}
object GomadApp extends ServerApp {
val ip = "127.0.0.1"
val port = envOrNone("HTTP_PORT") map (_.toInt) getOrElse (8787)
override def server(args: List[String]): Task[Server] =
new GomadApp(ip, port)
.build()
.start
}
좋아, 설명서를 읽은 후 확인해 보았습니다. 응답은 작업 그 자체라고 생각됩니다. –
0.15 문서를 읽으십시오. – Reactormonk