2017-11-20 1 views
0

가능한 호스트 목록에 클라이언트 singleRequest 라운드 로빈 akka-HTTP 클라이언트의 Http().singleRequest(uri = Uri(hostUri))akka-HTTP 내가 사용하여 다른 서비스에 요청을 전송하고

내가 클러스터의 호스트 목록이 - hosts: List[String]합니다. 어떤 종류의 라운드 로빈 (round-robin)을 사용하여 요청 중 하나에 요청을 보내고 다른 요청은 실패 할 경우를 대비하여 백업으로 사용하려고합니다.

답변

0

질문을 통해 구현해야 할 것이 무엇인지 완벽하게 이해 한 것 같습니다. 정확히 당신에게 도전하고있는 것은 무엇입니까? 랜덤/라운드 로빈을 수행하는 방법 또는 실패한 경우 다른 요청을하는 방법 나는 akka-http를 사용하기 시작할만큼 충분히 용감한 사람들이 무작위 화를하는 방법을 알고 있기 때문에 첫 번째가 아니라고 믿습니다. 두 번째 부분을 위해 나는 파견 라이브러리에서 다시 시도 할 수 미래에 살펴보고 추천 :

https://www.bimeanalytics.com/engineering-blog/retrying-http-request-in-scala/

+0

아니었다 호스트 당 요청 재 시도가 유일한 것은 실패한 경우 * 다른 URL로 * – mermer

0

가 처음에 나는이 구현이 긴 것이라고 생각하고 간단하게 만들 것입니다 내가 그걸 그리워 도구가 있음. 은 결국 나는 재귀 적으로 구현하는 간단 파악

def autorecoveredRequest(
    hosts: List[String], 
    hostToRequest: (String) => HttpRequest)(
    implicit ec: ExecutionContext): Future[HttpResponse] = 
    Random.shuffle(hosts) match { 
     case host :: rest => 
     Http().singleRequest(hostToRequest(host)).recoverWith { 
      case e => 
      log.warn(s"Request to host ${host} failed") 
      autorecoveredRequest(rest, hostToRequest) 
     } 
     case Nil => 
     log.error("No more hosts to recover request") 
     Future.failed(new Exception("No more hosts to recover request")) 
    } 

여기에 누락 될 수 있습니다 것이 내 경우에는 내가 다른 요청을 의미 문제

관련 문제