지속적인 작업 / 모니터링을하는 배우를 사용하는 플레이 어플리케이션이 있습니다.
예 :
class MyActor extends Actor {
def act() { while(true) { /* work */ } }
}
내 코드에서이 액터를 정확히 한 번 시작합니다.
내 문제는 play가 자동으로 응용 프로그램을 다시 빌드 할 때마다 (소스 변경으로 인해) 새 액터를 생성하지만 이전 액터를 제거하지는 않는다는 것입니다. 모니터링을 위해 액터 대신 스레드 (데몬 스레드 포함)를 사용하는 경우에도 똑같은 일이 발생합니다.
자동 리빌드에서 이전 액터 / 스레드를 죽일 수있는 방법이 있습니까, 아니면 하나의 액터 만 존재하는지 확인하는 방법이 있습니까 (액터 스레드를으로 만들려고 시도했지만 object
도움이되지 않았습니다). 응용 프로그램을 수동으로 (변경할 때마다 응용 프로그램을 다시 시작해도 자동으로 괜찮습니다)?
또한 백그라운드 모니터링을위한 더 나은 패턴이 있습니까 (분명히 끝나지 않는 스레드를 생성하지 않는 패턴).
감사
응용 프로그램 이벤트를 수신하도록 전역 개체 를 정의 할 수 있습니다 (기본 패키지에 정의되어야 함).
import play.api.GlobalSettings
object Global extends GlobalSettings {
override def onStart(application: play.api.Application) {
println("Starting actors")
MyActorSystem
}
override def onStop(application: play.api.Application) {
println("Stopping actors")
MyActorSystem.system.shutdown()
}
}
다시로드가 발생하면 중지 및 시작 이벤트가 트리거됩니다. Play의 내부 액터 시스템을 사용하는 경우 대신 이것을 사용할 수 있다고 생각합니다.
play.api.libs.concurrent.Akka.system.shutdown()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다