2016-09-19 3 views
0

우리는 Akka를 메모리 내장 메시지와 함께 사용 중이며 노드 클러스터링을 사용하지 않습니다. 우리는 couchbase를 충분한 공간을두고 처리 백엔드로 사용합니다.couchbase에있는 Akka 사서함 (대기열)

노드가 작동하는 한 모든 것이 잘 작동합니다. 그러나 노드가 다운되면 모든 메모리 내 메시지가 손실됩니다. 우리는 작업자가 이상적 일 때 작업자가 큐에 500 개의 메시지를 요청할 때 작업 디자인을 구현하여 작업량을 줄였습니다. 그러나 그 500 명은 여전히 ​​메모리에 있습니다.

각 사서함의 대기열로 couchbase를 사용할 수있는 방법이 있습니까? 이전 akka는 내구성 사서함을 가지고 있지만 지금은 사라졌습니다. 영속 주체는이 문제를 해결하지 못합니다.

답변

0

사용자 지정 사서함 구현의 종류를 만들고이를 액터 구성의 적절한 액터/라우터에 바인딩 할 수 있습니다.

간단히 말해
class MyPrioMailbox(settings: ActorSystem.Settings, config: Config) 
    extends UnboundedStablePriorityMailbox(
    // Create a new PriorityGenerator, lower prio means more important 
    PriorityGenerator { 
    // 'highpriority messages should be treated first if possible 
    case 'highpriority => 0 

    // 'lowpriority messages should be treated last if possible 
    case 'lowpriority => 2 

    // PoisonPill when no other left 
    case PoisonPill => 3 

    // We default to 1, which is in between high and low 
    case otherwise  => 1 
    }) 

, 당신은 카우치베이스 주식회사에서 큐에 의해 백업됩니다 자신의 사서함을 생성하면됩니다 - 이것은 완벽하게 예를 들어, official documentation에 설명되어 있습니다. 아마도 액터간에 큐를 분할하고 액터가 올바르게 다시 시작되도록 처리하는 방법을 알아야 할 것입니다.하지만 이는 사용중인 감독 액터와 관련이 있습니다.