Как узнать, что почтовый ящик пуст для удаления и отправки сообщений с низким приоритетом? - PullRequest
1 голос
/ 23 мая 2019

Мне нужен субъект, который хранит сообщения с низким приоритетом при получении и, когда почтовый ящик пуст, отменяет запись сообщений с низким приоритетом и отправляет их тоже. мой почтовый ящик нестандартный и это мой актер:

 class Dispatcher (fileRouter: ActorRef, metaRouter: ActorRef) extends Actor with Stash{

  def receive = {
  case requestQuery  => metaRouter ! requestQuery
  case TrackMeta if sender == metaRouter => fileRouter ! TrackMeta
  case other => stash()
    println("dispatcher buffered")
  }

}

Я не знаю, когда почтовый ящик пуст и где (каким способом) я должен написать снятие и отправку. Заранее спасибо.

1 Ответ

1 голос
/ 24 мая 2019

Актер не несет ответственности за управление сообщениями, он дурак в этой функциональности. Ответственный за отправку сообщения актеру - диспетчер. Вы можете реализовать черту UnboundedPriorityMailbox , здесь вы можете найти документацию в Akka Doc. UnboundedPriorityMailbox .

class CustomPriorityActorMailbox(settings: ActorSystem.Settings, config: Config) extends UnboundedPriorityMailbox(
 PriorityGenerator {

// Int Messages
 case x: requestQuery => 1
 // String Messages
 case TrackMeta => 0
 // Long messages
 case _ => 2
 })

В этом классе вы можете определить свои приоритеты.

Затем необходимо настроить новую конфигурацию диспетчера.

 custom-dispatcher {
     mailbox-type = "com.example.CustomPriorityActorMailbox"

    }

Затем при создании вашего актера вы можете настроить своего диспетчера:

val myPriorityActor = system.actorOf(Props[MyActor].withDispatcher("custom-dispatcher"))

Надеюсь, это поможет!

...