Как использовать Akka BoundedMailBox, чтобы душить производителя

У меня есть два актера, один производит сообщения, а другой потребляет сообщения с фиксированной скоростью.

Можно ли ограничить производителя потребителями BoundedMailBox? (обратное давление)

Мой продюсер в настоящее время периодически намечает (отправляя ему тиковое сообщение), есть ли способ запланировать его по доступности в почтовом ящике потребителей?

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

1 ответ

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

Смотрите здесь для обсуждения и более тестирования этой природы. https://groups.google.com/forum/?fromgroups=

Из этой темы:

object ProducerConsumer extends App {

  implicit val system = ActorSystem("ProducerConsumer")

  def waitFor(actor: ActorRef) {
    Await.ready(gracefulStop(actor, 5.seconds), 5.seconds)
  }

  val consumers = system.actorOf(Props[Consumer].
    withRouter(RoundRobinRouter(4)).
    withDispatcher("consumer-dispatcher"), "consumer")

  for (work <- generateWork)
    consumers ! work

  consumers ! PoisonPill
  waitFor(consumers)
  system.shutdown
}

application.conf:

consumer-dispatcher {
  type = BalancingDispatcher
  mailbox-capacity = 100
}
Другие вопросы по тегам