我想知道Akka中是否有任何可以讓演員定期執行的機制?我怎樣才能讓阿卡演員每5分鐘執行一次?
回答
你並不真的需要一個演員要做到這一點在阿卡1.3.1你可以安排一個功能每5分鐘被稱爲像這樣:
Scheduler.schedule(() => println("Do something"), 0L, 5L, TimeUnit.MINUTES)
但是,如果你希望它是其他原因一個演員如果你使用的阿卡2.0,那麼你會這樣稱呼它
case class Message()
val actor = actorOf(new Actor {
def receive = {
case Message() => println("Do something in actor")
}
}).start()
Scheduler.schedule(actor, Message(), 0L, 5L, TimeUnit.MINUTES)
它會像這樣
val system = ActorSystem("MySystem")
system.scheduler.schedule(0 seconds, 5 minutes)(println("do something"))
完成
或發送消息給一個演員,每5分鐘這樣的
case class Message()
class MyActor extends Actor {
def receive = { case Message() => println("Do something in actor") }
}
val system = ActorSystem("MySystem")
val actor = system.actorOf(Props(new MyActor), name = "actor")
system.scheduler.schedule(0 seconds, 5 minutes, actor, Message())
使用日程表的方法是一個很好的方法,雖然有對消息排隊一個潛在的,如果按計劃完成的工作是如此之大它可能需要比預定的時間間隔更長的時間。如果你想結束一個迭代的和開始下一個之間發生的時間間隔,然後使用scheduleOnce
有以下模式:
import akka.actor.Actor
import scala.concurrent.duration._
class SchedulingActor extends Actor {
override def preStart(): Unit = {
self ! "Do Some Work"
}
def receive = {
case "Do Some Work" =>
doWork
context.system.scheduler.scheduleOnce(5 minutes, self, "Do Some Work")
}
def doWork = ???
}
這是2016年的相關答案。Scheduler.schedule不再是有效的方法。 – Zee 2016-05-26 13:01:48
難道你不能只使用'context.system.scheduler.schedule(...)'每5分鐘發送一次消息給'self'嗎?它看起來會更乾淨,並且不需要重寫'preStart'。 – 2017-06-05 19:49:39
@BranislavLazic不,不設置循環時間表的目的是避免向演員發送另一條消息,前提是處理邏輯需要超過每個預定消息之間的時間間隔的時間。通過scheduleOnce(),演員可以在需要的時間內完成任何需要的工作,然後在安全的情況下設置另一個時間表來發送未來消息給自己。對於某些情況,這可以避免死鎖和其他併發問題。 – speby 2017-07-19 03:00:04
如果有人要的Java代碼,然後他們可以這樣做
Cancellable cancellable = system.scheduler().schedule(Duration.Zero(), Duration.create(5, TimeUnit.MINUTES), cronActor, "tick", system.dispatcher(), null);
- 1. 我怎樣才能每10分鐘從HTML執行一次外部JS?
- 2. 我怎樣才能每隔5分鐘按空間?
- 3. 我怎樣才能讓-drawRect執行?
- 4. 阿卡 - 一個演員怎樣才能得到一個Web服務的引用
- 5. 我怎樣才能讓消息每12小時彈出一次?
- 6. 我怎樣才能看到每一行?
- 7. 我怎樣才能每行只能附加一次替換?
- 8. 我想每5分鐘撥打一次api電話。我怎樣才能達到這個使用gatling?
- 9. 阿卡和併發演員執行
- 10. 我怎樣才能一次咀嚼陣列中的每一行?
- 11. 解釋這個計時器 - 我怎樣才能設置爲每5分鐘? C#
- 12. 管理阿卡一次性演員
- 13. 我怎樣才能讓cron執行一個php腳本?
- 14. 我怎樣才能每10分鐘使用重複間隔?
- 15. 我怎樣才能讓
- 16. 我怎樣才能讓這個方法更新每次通話
- 17. 我怎樣才能讓一個計時器最後一分鐘然後停止
- 18. 我怎樣才能讓我的shell腳本可執行
- 19. 怎樣才能讓卡使用jQuery
- 20. 我怎樣才能讓我的領域只設置一次?
- 21. 怎樣才能一次
- 22. 阿卡演員Testkit
- 23. 在阿卡演員
- 24. 從阿卡演員
- 25. 我們怎樣才能在一次robotframework
- 26. 我怎樣才能得到我的asp.net網站每次執行的時間?
- 27. 我怎樣才能每5秒發送一個請求在jmeter
- 28. 如何讓cron每分鐘運行一次「N」分鐘,其中n%5 == 1?
- 29. 我怎樣才能讓這樣的
- 30. 我怎樣才能提供一個值在幾分鐘內setAnimationDuration?
這裏我只是找到了一個完美的解決方案:http://doc.akka.io/docs/akka/2.0/scala/scheduler.html – 2012-03-15 06:34:41