2013-02-21 3 views
2

저는 스칼라 2.10에서 AKKA 2.1을 사용하고 있습니다.akka 배우 시스템을 사용할 수있을 때까지 기다려주십시오.

배우 시스템을 시작하고 몇 개의 액터를 인스턴스화하려면 여러 대의 기계가 필요합니다. 이 후 각 시스템은 다른 모든 시스템에 액세스하여 "actorFor (...)"를 사용하여 액터에 대한 참조를 수집해야합니다.

그러나 액터 시스템이 연결되기 전에 다른 시스템에서 부팅 할 때까지 기다리는 방법이 필요합니다. 그렇지 않으면 오류가 발생합니다.

B가 오프라인 인 동안 배우 시스템 A가 B에 연결되면 내 프로그램이 실패합니다. 그러나 A가 B에 연결하고 B에있는 원격 액터 참조를 얻으면 B가 실제로 액터를 인스턴스화하면 프로그램이 계속됩니다.

간단히 말해, 연결을 시도하기 전에 B에서 생성 이벤트를 기다리는 것이 필요합니다. 스칼라 + AKKA에서 이렇게하는 좋은 방법이 있습니까?

+0

배우가되면 언 클/언 베트를 볼 수 있으며 서비스가 가능 해지면 메시지를 보낼 수 있습니다. – twillouer

답변

2

Akka에 대한 클러스터 지원을 살펴볼 수 있습니다. 이 기능을 사용하면 다른 시스템이 클러스터에 참여하여 통신 할 수있게 될 때 이벤트를들을 수 있습니다.

+0

실험 클러스터 지원을 사용하는 데별로 관심이 없습니다. 표준 원격 제어 시스템으로는 이렇게 할 수있는 방법이 정말로 없습니까? – Felix

+0

상황이 개선되었습니다 - 현재 안정적인 릴리스 (2.2.3) 클러스터에서는 실험적이지 않습니다. –

0

첫째로, actorSelection은 특히 네트워크를 통해 액터에 대한 참조를 얻기위한 제안 된 메커니즘입니다. 참조 : Akka Docs

이것은 비동기 및 분산 시스템에서 드문 문제입니다. akka 클러스터 지원은 발전기와 같은 프레임 워크에서 채택 된 모든 종류의 메커니즘을 사용합니다. 배우 각자가 사람들이고 각 배우 시스템이 건물에있는 사람들이라고 상상한다면 밥이 거리 건너편에 건물에 들어 왔는지 묻는 것과 비슷합니다. 다음 중 하나를 수행 할 수 있습니다.

  • Bob이 전화를받을 때까지 계속 전화를 걸어보세요. 즉, 성공할 때까지 actorRef을 얻으려고 시도하는 메시지를 보내고 오류를 처리하십시오.
  • 도착했을 때 bob에게 전화를합니다. 그러나 이것은 Bob 22가 당신 건물에 있다는 사실을 알지 못하기 때문에 실제로 잡기입니다.
  • 다른 모든 액터 시스템이 생성시 암시 적으로 인식하는 'seed'액터 시스템을 소개하고 액터가 사용 가능할 때마다 해당 액터로 해당 메시지를 보냅니다. 사실 중앙 집중식 저장소를 만듭니다.
1

사람들의 문제를 해결하는 데 시간의 99 %는 배우들과 함께 해결할 것입니다. 건물 (ActorSystems)과 사람 (Actors)이라고 상상해보십시오.

"/ user/receptionist"와 같은 일반적인 경로에서 ActorSystem 시작시 생성 된 "안내 원"액터 (ActorSystem이 시작될 때 Akka Extensions가로드되도록 구성 될 수 있음)를 만들 수 있습니다. 그/그녀가 온라인에 올 때 배우 X/Y/Z와 당신을 연결하고, X/Y/Z를 접수 원에게 등록시킵니다. X/Y/Z가 외부 액터가 요청할 때 X/Y/Z가 없다면 시간 초과 또는 X/Y/Z가 "보고"될 때까지 요청을 저장합니다.