Ошибка при попытке сделать персистентного актера требующим настраиваемого почтового ящика с RequMessageQueue - PullRequest
0 голосов
/ 18 марта 2019

Я пробую следующее:

class ClientActor (stockActor: ActorSelection, paymentsActor: ActorSelection) extends PersistentActor
  with AtLeastOnceDelivery with akka.actor.ActorLogging with RequiresMessageQueue[akka.custom.CustomMailbox]{
//actor implementation

}

Я получаю ошибку:

illegal inheritance;

     self-type Shopping.ClientActor does not conform to akka.dispatch.RequiresMessageQueue[akka.custom.CustomMailbox]'s selftype akka.dispatch.RequiresMessageQueue[akka.custom.CustomMailbox]
      with AtLeastOnceDelivery with akka.actor.ActorLogging with RequiresMessageQueue[akka.custom.CustomMailbox]{

То же самое работает с непостоянным актером:

    class PaymentsActor extends Actor with akka.actor.ActorLogging with RequiresMessageQueue[akka.custom.CustomMailbox] {
    // actor implementation
}

1 Ответ

1 голос
/ 18 марта 2019

Отслеживая соответствующий исходный код, PersistentActor расширяет Eventsourced, что расширяет PersistenceStash , что, в свою очередь, расширяет черта Stash :

trait Stash extends UnrestrictedStash with RequiresMessageQueue[DequeBasedMessageQueueSemantics]

Asуказано в исходном коде:

Обратите внимание, что черта Stash может использоваться только вместе с актерами, которые имеют почтовый ящик на основе deque.По умолчанию акторы на основе Stash запрашивают почтовый ящик на основе Deque, поскольку свойство stash расширяет RequiresMessageQueue[DequeBasedMessageQueueSemantics].Вы можете переопределить почтовый ящик по умолчанию, предоставляемый при запросе DequeBasedMessageQueueSemantics через конфигурацию ...

Один из подходов заключается в настройке вашего почтового ящика, подобного тому, что предлагается в примечаниях исходного кода:

akka.actor.mailbox.requirements {
  "akka.dispatch.BoundedDequeBasedMessageQueueSemantics" = your-custom-mailbox
}
...