Scala 如何使用guice将参数注入akka RoundRobinPool的routee
我正在使用Play框架、Akka和Guice。需要简单地将一些服务(或另一个参与者)注入到由路由器创建的参与者中,路由器被注入到某个控制器中 我有一个路由器配置:Scala 如何使用guice将参数注入akka RoundRobinPool的routee,scala,playframework,dependency-injection,akka,guice,Scala,Playframework,Dependency Injection,Akka,Guice,我正在使用Play框架、Akka和Guice。需要简单地将一些服务(或另一个参与者)注入到由路由器创建的参与者中,路由器被注入到某个控制器中 我有一个路由器配置: akka.actor.deployment { /job-router { router = "round-robin-pool" nr-of-instances = 10 } } 和一个模块来绑定这个路由器 class ComponentModule extends AbstractModule with
akka.actor.deployment {
/job-router {
router = "round-robin-pool"
nr-of-instances = 10
}
}
和一个模块来绑定这个路由器
class ComponentModule extends AbstractModule with AkkaGuiceSupport {
def configure() ={
bindActor[JobActor]("job-router",(p: Props) => FromConfig.props(JobActor.props))
}
}
还有演员,注入了另一个路由器
class JobActor @Inject() (@Named("b-router")bRouter: ActorRef) extends Actor {
def this() = {
this(null)
}
override def receive = {
case SayHello(name: String) => {
println(bRouter)
sender() ! "hello,"+name
}
}
}
object JobActor {
def props = Props[JobActor].withDispatcher("akka.actor.default-dispatcher")
}
但是没有注入b-router
,而是调用了不带参数的构造函数,因此我不能简单地将b-router
放入RoundRobinPool的routee中
我确实理解儿童演员(比如演员[akka://application/user/job-router/$a#-22311049]
)不是由Guice直接注入的,只是想知道是否有一种简化的方法来实现这一点
由于实际routee作业路由器/$a#-22311049
是RoundRobinPool的子对象,我实现RoundRobinPool注入并传递给routee是否是最佳实践
更新:
这将完成注入演员的工作:
context.actorSelection("akka://application/user/b-router")
关于Guice注入的其他服务
更新2:
通过注入另一个“顶级”参与者(dao提供程序参与者
)临时解决:
lazy val dao=Await.result((context.actorSelection("/user/dao-provider-actor") ? GetXDao).mapTo[XDAO],10.milliseconds)