3

我有两个演员,一个正在生产消息,另一个正在以固定速率消费消息。

是否可以让生产者被消费者 BoundedMailBox 限制?(背压)

我的生产者目前是定期安排的(向它发送一条滴答消息),有没有办法让它在消费者邮箱中按可用性安排?

我使用的是一劳永逸的风格( consumer.tell() ),因为我不需要回应。我应该使用不同的消息发送方法吗?

4

1 回答 1

-1

只需指定邮箱限制,如果邮箱已满,它似乎会阻止。我自己没有尝试过,但是这个线程中的人正在查看行为,并且都发现一旦邮箱达到极限,演员就会阻塞。

有关此性质的讨论和更多测试,请参见此处。 https://groups.google.com/forum/?fromgroups=#!topic/akka-user/e0tebq5V4nM

从那个线程:

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
}

应用程序.conf:

consumer-dispatcher {
  type = BalancingDispatcher
  mailbox-capacity = 100
}
于 2013-05-13T04:13:17.473 回答