2014-06-22 3 views
3

주어진 API를 사용하기 위해 먼 서버에 연결하는이 Play 앱이 있습니다. 내 요청을 원거리 서버에로드 밸런싱하기 위해 동일한 서버에 여러 계정을 연결합니다. 각 계정은 지정된 횟수만큼 API를 쿼리 할 수 ​​있습니다. 각 계정은 Akka 액터에 의해 처리되며 이러한 액터는 Akka Round Robin 라우터 뒤에 있습니다. 따라서 먼 API를 소비하고자 할 때 나는 원하는 정보를 얻기 위해 RR 라우터에 "요청"한다.다음 라운드 로빈 경로로 메시지 전달

이 구현은 계정이 단절 될 때까지 정상적으로 실행됩니다. 기본적으로 한 계정이 연결 해제되면 액터는 "연결에 문제가 있습니다"라는 주어진 객체를 반환 한 다음 RR 라우터에 다른 요청을 다시 보내 다른 계정에서 처리하도록합니다.

궁금한 점은 router-route 그룹 외부에 "다시 시도"논리가 있어야하는 대신 내부적으로 할 수있는 방법이 있습니까? 나는 라우터 수준에서 예를 들어, "연결에 문제가있다"라는 메시지를 처리하는 논리를 정의합니다. 다음 라우트로 요청을 자동 전달하여 모든 라우트가 최종 응답을 리턴합니다. 노력하고 아무도 일하지 않았습니까?

Akka가이를 달성하는 간단한 방법을 제공합니까, 아니면 구현을 계속해야합니까? 나는 완전히 디자인을 이해한다면

+0

왜이 API를 사용하는 계정이 여러 개입니까? 연결 또는 요청 제한을 해킹하려고하십니까? – wingedsubmariner

+0

예. 캐싱 외에도 여러 계정을 사용할 수 있습니다. – Peter

답변

0

는 잘 모르겠어요하지만 난 당신이 라우팅 로직을 지원 최초의 완전한 모델을 ScatterGatherFirstCompleted 사용하려고한다고 생각합니다. 간단한 형태

    ---> Route 
     --> SGFC-1 
RR -> 

또는 가능 라운드 로빈 라우터에 결합

router.type-mapping { 
    ... 
    scatter-gather-pool = "akka.routing.ScatterGatherFirstCompletedPool" 
    scatter-gather-group = "akka.routing.ScatterGatherFirstCompletedGroup" 
    .. 
} 

.

    ---> Route 
     --> SGFC-1 
RR -> 
     --> SGFC-2 
        ---> Route 

제안 연결에서와 동일한 것은 경로로 표시됩니다. SGFC-1과 SGFC-2는 동일한 루트 풀 (conenctions.) 또는 풀의 일부에 액세스 할 수 있어야합니다.