Сделайте так, чтобы экземпляр Akka-2 отправлял себе сообщение каждые n TimeUnits без переполнения почтового ящика - PullRequest
5 голосов
/ 23 февраля 2012

Экземпляр Akka-2 должен оставаться в бесконечном цикле и каждые 10 минут проверять наличие данных для обработки.

Как спроектировать цикл так, чтобы экземпляр вызывал сам себя, проверял работу изатем спит в течение интервала?

Также я вижу, что никто больше не может запросить размер почтового ящика.Как сделать так, чтобы сообщения игнорировались до тех пор, пока рабочая задача (в данном случае функция отправки) активна?

case class Dispatch()

// Automatical start? The start function has been removed since Akka 2 ?
val dispatcher = system.actorOf(Props[MailDispatcher])

class MailDispatcher extends Actor {

  private val interval = Config.getLong("mail.check.interval")
  context.setReceiveTimeout(Duration(interval, TimeUnit.SECONDS))

  def receive = {
    case ReceiveTimeout => {
      self ! Dispatch          
    }
    case Dispatch => dispatch()
    case e: Exception => Logger.error("unexpected Error: " + e)
  }

  def dispatch() {       
      // trigger mail-dispatch       
  }
}

1 Ответ

3 голосов
/ 23 февраля 2012

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

использование: http://akka.io/docs/akka/2.0-RC2/scala/actors.html#initial-receive-timeout

Затем, когда вы получаете сообщение ReceiveTimeout, вы запрашиваете работу и отправляете работу в свой почтовый ящик.

...