我有两个参与者,一个正在产生消息,另一个正在以固定速率使用消息。

是否有可能使生产者受到消费者BoundedMailBox的限制? (背压)

我的生产者当前是定期排定的(向它发送打勾消息),是否可以通过消费者邮箱中的可用性来排定它?

由于我不需要响应,因此我正在使用即弃即用样式(Consumer.tell())。我应该使用其他消息发送方法吗?

最佳答案

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

请参阅此处进行讨论并进行更多此类测试。
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
}

application.conf:
consumer-dispatcher {
  type = BalancingDispatcher
  mailbox-capacity = 100
}

关于akka - 如何使用Akka BoundedMailBox限制生产者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16500352/

10-11 22:20
查看更多