Tôi muốn biết liệu có bất kỳ cơ chế nào trong Akka có thể có một diễn viên được thực hiện định kỳ không?Làm cách nào để có một diễn viên Akka được thực hiện sau mỗi 5 phút?
Trả lời
Bạn không thực sự cần một diễn viên để làm điều này trong Akka 1.3.1 bạn có thể sắp xếp một hàm được gọi mỗi 5 phút như thế này:
Scheduler.schedule(() => println("Do something"), 0L, 5L, TimeUnit.MINUTES)
Tuy nhiên, nếu bạn muốn nó được một diễn viên vì những lý do khác mà bạn sẽ gọi nó là như thế này
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)
Nếu bạn đang sử dụng Akka 2.0 sau đó nó sẽ được thực hiện như thế này
val system = ActorSystem("MySystem")
system.scheduler.schedule(0 seconds, 5 minutes)(println("do something"))
Hoặc gửi một thông điệp tới một diễn viên mỗi 5 phút như
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())
Phương pháp này sử dụng lịch là một trong những cách tiếp cận tốt, mặc dù có một tiềm năng cho các thông điệp để xếp hàng lên nếu công việc được thực hiện đúng tiến độ là rất lớn có thể mất nhiều thời gian hơn khoảng thời gian đã lên lịch. Nếu bạn muốn khoảng thời gian xảy ra giữa cuối của một lần lặp và bắt đầu tiếp theo, sau đó sử dụng scheduleOnce
với mẫu sau:
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 = ???
}
Đây là câu trả lời phù hợp kể từ năm 2016. Scheduler.schedule không còn là phương thức hợp lệ nữa. – Zee
Bạn không thể sử dụng 'context.system.scheduler.schedule (...)' để gửi thư đến 'self' cứ 5 phút một lần? Nó sẽ trông sạch sẽ hơn và loại bỏ nhu cầu ghi đè 'preStart'. –
@BranislavLazic Không, toàn bộ điểm không đặt lịch biểu định kỳ là tránh gửi một thông báo khác đến diễn viên nếu có tình huống trong đó logic xử lý yêu cầu thời gian vượt quá khoảng thời gian giữa mỗi thông báo được lên lịch. Với scheduleOnce(), các diễn viên có thể mất miễn là nó cần để hoàn thành bất cứ công việc là cần thiết, và sau đó khi nó được an toàn, thiết lập một lịch trình để gửi một thông điệp tương lai cho chính nó. Đối với một số trường hợp, điều này có thể tránh được các sự cố và các vấn đề tương tranh khác. – speby
Nếu bất cứ ai muốn mã java sau đó họ có thể làm như thế này
Cancellable cancellable = system.scheduler().schedule(Duration.Zero(), Duration.create(5, TimeUnit.MINUTES), cronActor, "tick", system.dispatcher(), null);
- 1. Akka Socket cho mỗi diễn viên
- 2. Tôi làm cách nào để kích hoạt một diễn viên tạm thời ở Akka?
- 3. Ưu tiên diễn viên Akka
- 4. Akka Đăng nhập bên ngoài diễn viên
- 5. Phát hiện máy chủ diễn viên từ xa Akka
- 6. Các diễn viên được phân phối ở Akka
- 7. Làm cách nào để diễn viên akka tương tác giữa các chủ đề
- 8. Bắt đầu diễn viên Akka trong Play
- 9. Làm thế nào để kiểm tra rằng diễn viên Akka đã được tạo ra trong Scala
- 10. Phát mẫu Websocket - Chỉ một diễn viên Akka?
- 11. Làm cách nào để bắt đầu diễn viên Akka từ 2.0?
- 12. AKKA gửi một đóng cửa với diễn viên từ xa
- 13. Làm cách nào để thực hiện một hành động mỗi 5 kết quả?
- 14. Sử dụng ScalaTest để kiểm tra các diễn viên akka
- 15. Làm cách nào để kiểm tra Diễn viên trong Java?
- 16. Làm thế nào để thực hiện một dịch vụ Web REST bằng cách sử dụng Akka?
- 17. Các diễn viên, tương lai và đóng cửa Akka
- 18. Diễn viên Akka: Cần một ví dụ để hiểu một số khái niệm cơ bản
- 19. Tạo chế độ xem vật hóa làm mới sau mỗi 5 phút
- 20. Ở Akka, tôi có thể giả mạo một thông điệp từ một diễn viên khác không?
- 21. Thử nghiệm đơn vị diễn viên Akka với Scala
- 22. Khám phá các diễn viên Akka trong cụm
- 23. Tạo thủ công phân cấp diễn viên trong akka
- 24. Ở Akka, làm cách nào để biết khi nào diễn viên sẵn sàng sử dụng sau khi đã được đăng ký với actorOf()?
- 25. chấm dứt chính xác các diễn viên akka trong scala
- 26. Làm thế nào để chờ hệ thống diễn viên Akka chấm dứt?
- 27. Akka - Bạn cần tạo bao nhiêu lần diễn viên?
- 28. Làm thế nào tôi có được một công việc cron để chạy mỗi 30 phút?
- 29. Các thuộc tính của diễn viên Akka của tôi có được đánh dấu @volatile không?
- 30. Làm thế nào để biết một diễn viên có nhàn rỗi không
ở đây tôi chỉ tìm thấy một giải pháp hoàn hảo: http://doc.akka.io/docs/akka/2.0/scala/scheduler.html –