scala 프로젝트에서 사용할만한 scala- elasticsearch 라이브러리는 sksamuel이 가장 좋은 것 같다. (아직 갈길이 멀지만.)
sksamuel의 HTTPClient을 잘 사용하고 있다.
val result = client.execute {
val req = search(indexName).
query {
bool {
//..
}
queryStatement = client.show(req)
req
}
}
중요한 것은 비동기로 되어 있어서 쭉 지나가 버린다.
동기(synchronous) 코드로 개발하려면 Await.result 또는 Await.ready를 사용한다.
Await.result를 사용하는 코드는 간단하다. 내부적으로 Future[Either[]] 형태로 Right/Left를 먼저 써야 한다.
import scala.concurrent.duration._
val response = Await.result(result, atMost = 5.second)
response match {
case Right(success) => {
// ..
}
case Left(e) => {
//..
}
}
Await.ready와 Await.result는 exception 처리방식이 조금 다르다. 나는 아직 완벽한 프로그램이 아니라서 차라리 crash가 나은 듯해서 Await.result를 사용해봤다.
exception이 발생하면 Await.result는 crash exception이 발생하고,
Await.ready는 exception을 Failure로 감싼다.
'scala' 카테고리의 다른 글
[play framework] WSClient 바로 사용하기 (0) | 2018.02.07 |
---|---|
trait의 내부 필드 접근하기 - 컴패년 오브젝트 (0) | 2018.02.02 |
scala retry 참조 코드 (0) | 2018.01.23 |
Spark와 Kafka 연동 (1) | 2018.01.20 |
[scala] 배열에서 앞 또는 뒤 엘리먼트 제거하기 - slice (0) | 2018.01.17 |