我想知道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