2015-08-06 2 views
0

Я готов переписать свое приложение Play1 с Play2, и мне нужно реализовать запланированные задачи, которые выполняются ровно один раз в день в определенное время. В моем старом приложении я реализовал это следующим образом:Активные ежедневные задачи Akka

  • задача по расписанию с использованием заданий Play1 и приложение работает на нескольких узлах

  • в указанное время все здоровые узлы запуска задачи, и я использую заблокировать запись в базе данных, чтобы гарантировать, что только один из них продолжит выполнение, а все остальные выходят без каких-либо действий.

Как реализовать аналогичную функциональность с Akka?

ответ

0

Вы можете просто использовать Scheduler для выполнения либо исполняемого или отправить сообщение для актера:

system.scheduler().scheduleOnce(Duration.create(24, TimeUnit.HOURS), 
    taskActor, "doTask", system.dispatcher(), null); 

Или

system.scheduler().scheduleOnce(Duration.create(24, TimeUnit.HOURS), 
    new Runnable() { 
    @Override 
    public void run() { 
     doTask() 
    } 
}, system.dispatcher()); 

Я бы предпочел метод, включая актер, хотя.

Вы можете прочитать о том, как создать актера для получения сообщения doTask here.

+0

Вопрос в том, как это сделать в среде с несколькими узлами и гарантировать, что задача не запускается более одного раза в день, имеет ли Akka какие-либо специальные функции для этого, я должен реализовывать ее в мануале. –

+0

Многооконный с точки зрения каждого узла работает с одним и тем же кодом? В этом случае вам, вероятно, понадобится какое-то глобальное состояние, такое как очередь сообщений или паб/подсистема, где каждый узел может видеть, какие задачи нужно выполнять в настоящее время. – thwiegan

+0

Правильно, каждый узел работает с одним и тем же кодом, и ему нужно какое-то глобальное состояние, хотя у Akka может быть что-то для глобальной очереди сообщений –

Смежные вопросы