2013-01-02 2 views
5

akka 메시지를 처리하는 것을 지연시키는 방법이 있는지 궁금합니다.Akka : 내구성있는 사서함에 지연 추가

사례 : 내가하는 모든 요청에 ​​대해 필요한 작업량이 적어서 2 시간 후에 추가 작업이 필요합니다.

AKKA에서 메시지 처리를 지연시키는 쉬운 방법이 있습니까? 아마도 ActiveMQ, RabbitMQ와 같은 외부 분산 대기열을 설정할 수 있습니다. RabbitMQ에는이 기능이 있지만 아마 그렇지 않습니다.

다시 시작하거나 충돌하는 경우에도 생존 할 수 있도록 사서함을 내구성있게 만들 필요가 있음을 알고 있습니다. 우리는 이미 mongo 설정을 가지고 있으므로 아마도 내구성을 위해 MongoBasedMailbox을 사용하고있을 것입니다.

답변

0

이상적은 아니지만 Akka Camel Quartz scheduler이 속임수를 사용합니다. 빌트인 ActorSystem 스케쥴러보다 더 많은 중량이 있지만, Quartz는 자체적 인 문제가 있음을 알고 있습니다.

+1

Quartz 내구성에 대한 견적이나 링크를 제공 할 수 있습니까? 그러한 보장이 없다면 [plain scheduler] (http://doc.akka.io/docs/akka/snapshot/scala/scheduler.html)를 사용하지 않는 이유는 무엇입니까? –

+0

"적은 양의 작업"결과가 재시작을 견뎌야하는 경우,'preRestart' 중에 상태를 어떻게 든 저장합니다. 내구성은 크래시입니다. – idonnie

+1

@ om-nom-nom - Quartz는 [지속적인 작업 기능] (http://quartz-scheduler.org/overview/features)을 가지고 있습니다. – jamie

0

정상적인 Akka 스케줄러를 사용할 수 있지만 서버를 다시 시작한 경우 작업 손실을 피하기 위해 액터 지속성 상태를 유지해야합니다.

최근 PersistentFsmActor를 사용했다 - 배우의 상태가

난 당신이 FSM (유한 상태 기계)를 사용할 필요가 귀하의 경우 모르겠어요를 지속 유지할 것이다, 당신은 기본적으로 단지 persistentActor를 사용할 수 있도록 작업이 삽입 된 시간을 저장하고 해당 시간의 스케줄러를 시작하십시오. 이 방법 - 서버를 다시 시작한 경우에도 배우가 새 예약 된 작업을 시작하고 생성합니다. 영구 데이터를 사용하여 실행 시간을 계산합니다.

+0

및 https://github.com/ironfish/akka-persistence-mongo를 사용할 수도 있습니다. – Elyran