2011-10-10 6 views
0

저는 스칼라에서 한동안 다뤄 보았고 멀리에서 Akka를 배웠고 마침내 급증했습니다. FSM 특성이 나를 위해 거래를 봉인했습니다. 나에게 우려되는 점은 데이터가 부적절하게 공유되는 방식을 생각해 냈기 때문에 Akka 모범 사례에 맞춰 이벤트 처리 루프를 잘못 생각했을 수 있습니다.Akka, 스레드 발신자, 에이전트 모범 사례

제 문제에는 들어오는 작업 요청을 Finite State Machines 인 적절한 액터와 일치시키는 센터 코디네이터가 있습니다. 나는 원래 onTransition이 주 이름뿐만 아니라 주 데이터를 제공 할 것이라고 생각했습니다.

나는 전통적인 데이터 캡슐화가 그 데이터를 리스너에 노출시키지 않는 이유가 될 것이라고 생각한다. 하지만 저에게는 다른 사람들이 그 데이터를 볼 수있는 두 가지 용도가 있습니다.

상태 데이터에는 기본 도메인 객체가 포함되어 있습니다.이 속성을 사용하면 요구 사항에 따라 작업을 처리 할 가장 적합한 액터를 결정하는 데 속성을 사용합니다. 작업 요구 사항이 동적이기 때문에 작업자 액티비티를 별도로 수집하는 것을 주저하고 있습니다 (그러나 왜 내가 일시 중지해야하는지 잘 모르겠습니다).

다른 전제 조건을 충족하고 모든 답장에 합류하는 모든 별도의 액터를 질의하는 아이디어는 비효율적이거나 적어도 아카에게 관용적이지 않습니다. 또한 UI에 현재 상태를 표시하고 상태를보기 위해 동일한 이벤트 대기열을 사용해야하는 이유가 없어야합니다.

어쨌든, 나는 FSM을 에이전트로 업데이트 할 것을 고려하고 있었지만, 그 자체가 배우이기 때문에, 그 간접적 인 계층이 나를 사는지 모르겠고, 이벤트 시퀀스에 대한 추론을 훨씬 어렵게 만들 수 있습니다.

Fowler의 이벤트 공동 작업에서 상태 데이터를 명시 적으로 보내고 있지만 상태 데이터를 자동으로 업데이트하는 모든 전환에 대해이 작업을 수행하는 더 쉬운 방법이 필요했습니다.

나는 이벤트 캐스케이드의 시퀀싱에 대한 내 머리를 감싸는 데 어려움을 겪고있다. 모든 들어오는 외부 이벤트가 단일 액터를 통해 오더라도 다음 내부 이벤트를 처리하기 전에 내부적으로 생성 된 모든 이벤트를 다른 모든 액터로 처리하려고합니다. 나는 중심 코디네이터를 사용하는 것을 생각하고 있었다!! 응답을 기다리는 것이 좋습니다. 그러나 나는 그 보증을 잃을 이벤트 체인 어딘가에 하나의 느낌표를 실수로 삭제하면 걱정이됩니다.

솔루션이 문제는 공유되는 모든 "내부"액터에 대해 단일 스레드 디스패처 (작업 훔친 상태 일 수도 있습니다)를 사용하여 내부 이벤트에 우선 순위가 높은 이벤트를 사용하는 등의 문제를 고려하고 있습니다.

제가 수행하려고 시도하는 것에 대한 모범 사례가 있습니까? 아니면 잘못된 것을 시도하고 있습니까?

답변

0

청취자가 업데이트를 등록 할 수있는 버스에 상태 변경 사항을 게시하는 것이 좋습니다.