저는 REST 웹 서비스를 호출하는 데 사용되는 스프레이 클라이언트가 있습니다. 현재 (new GeoSprayWebClient
사용)이 클라이언트의 인스턴스를 만들고 (아래 코드 참조) 내 액터 내에서 REST 요청을 재사용하고 있습니다. 그러나 서비스의 단일 인스턴스는 모든로드를 처리 할 수 없습니다. 따라서 REST 서비스의 복제본을 소개하고자합니다.ActorSystem 내에서 스프레이 클라이언트를 사용하여 라우팅 구현
저는 스프레이를 처음 접하면서도 여전히 기초를 배우려고합니다. 내 질문은
입니다. 1) 스프레이가 내부적으로 Akka 배우를 사용한다는 것을 알고 있습니다. 이 특별한 경우에 클라이언트 인스턴스에 대해 ActorRef
을 얻을 수 있으므로 여러 클라이언트 ActorRef를 생성하고 Akka 라우터를 생성하는 데 사용할 수 있습니다. 2) 스프레이 클라이언트 API는 유스 케이스를 지원할 수있는 모든 종류의 라우팅 기능을 제공합니까?
import akka.actor.ActorSystem
import spray.client.pipelining._
import spray.http._
import scala.concurrent.Future
trait GeoWebClient {
def get(url: String, params: Map[String, String]): Future[String]
}
class GeoSprayWebClient(implicit system: ActorSystem) extends GeoWebClient {
import system.dispatcher
// create a function from HttpRequest to a Future of HttpResponse
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive
// create a function to send a GET request and receive a string response
def get(path: String, params: Map[String, String]): Future[String] = {
val uri = Uri(path) withQuery params
val request = Get(uri)
val futureResponse = pipeline(request)
futureResponse.map(_.entity.asString)
}
}
여기에 설명 된대로 내가 분무 할 수있는 클라이언트 API를 사용하십시오 : http://spray.io/documentation/1.2.1/spray-can/http-client/host-level/#starting-an -httphostconnector 당신은 ActorRef를 얻고 그것을 Akka 라우터 뒤에 넣을 여러 호스트 커넥터 (일반적으로 다른 호스트에 배포 할 호스트)를 만들 수 있습니다. – jrudolph
@jrudolph - 답변 대신 댓글을 달 수 있다면 답변으로 받아 들일 것입니다. 이 링크를 사용하여 문제를 해결할 수있었습니다. 나는 또한 해결책을 게시 할 것이다. –