1
필자는 Dependency Injection에 익숙하지 않고 이제는 애플리케이션을 Play 2.5.x로 마이그레이션 할 때 배워야합니다.Akka 배우의 @Singleton을 사용하는 방법은 무엇입니까?
import scala.concurrent.duration.DurationInt
import scala.language.postfixOps
import akka.actor._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import scalaj.http._
import WorkerService
object PollActor {
def props(host: String) = Props(new PollActionActor(host))
}
// Actor that polls a host for information
class PollActor(host: String) extends Actor with ActorLogging {
// timer for poll
var timer: Cancellable = context.system.scheduler.schedule(0 second, 10 second, self, TimeStep())
// handle messages
override def receive = {
case TimeStep() =>
getWork match {
case Some(work:String) =>
// How to do this?: ChecklistService.doWork(work)
case None =>
}
}
def getWork = {
try {
Some(Http(host)
.option(HttpOptions.readTimeout(10000))
.option(HttpOptions.connTimeout(10000))
.asString.body)
} catch {
case _:Throwable =>
None
}
}
case class TimeStep()
}
그리고이 같은 컨트롤러 뭔가 :
@Singleton
class Application @Inject() (implicit system: ActorSystem) extends Controller {
val pollActor = system.actorOf(PollActor.props("127.0.0.1"))
def index = Action {
pollActor ! TimeStep
}
}
import javax.inject._
@Singleton
class WorkerService {
def doWork(work:String) {
...
}
}
나는 이런 식으로 뭔가를보고 배우가 :
나는 이런 식으로 뭔가를 찾고 싱글 서비스가
배우의 시간 단계에서 WorkerService.doWork
으로 전화하는 방법은 무엇입니까?
고맙습니다. 애플리케이션을 다시 실행할 수있게되자 마자이 마이그레이션을 시도 할 것입니다.이 마이그레이션은 엄청난 고통입니다. –
좋아,이 건설에 매개 변수가없는 배우를 위해 작동하는 것 같다,하지만이 작동하지 않습니다 '객체 PollActor { 데프 소품 (아웃 : ActorRef) = 소품 (교체 아웃 새로운 PollActor()) } { ... } –
나는 이것을 시도했지만 효과가 있었지만 응용 프로그램이 정말 힘들어서 Scalas singleton으로 되돌 렸습니다. 패턴을 생성하고 주입 된 매개 변수로 Application 클래스에서 시작했습니다. 처음부터 응용 프로그램을 작성하는 것은 다른 문제입니다. 감사! –