使用Akka actor时,创建的每个actor都会在ActorRegistry中注册 . ActorRegistry是一个单身人士,允许所有演员轻松查找和管理(开始,停止......) .
但是,在OSGi环境中,可以在内部使用Akka actor安装许多应用程序包(并且Akka作为包本身安装) . 应用程序包的某些参与者应该可用于其他捆绑包,因此可以充当导出的服务 . 其他人严格来说是内部的 . 然而,ActorRegistry包含所有bundle的所有actor(因为它是一个单独的),所以导出的和内部的都是 . 这意味着即使是捆绑内部使用的actor也可用于任何其他捆绑包 .
但是我希望能够更好地控制哪些参与者在捆绑范围之外可用 . 理想情况下,每个bundle都有自己的ActorRegistry,并决定将哪个actor作为OSGi服务发布 .
那么在OSGi环境中使用Akka作为模块化应用程序的最佳方法是什么,以实现真正的模块化?
(关于这一点的背景http://blog.xume.com/2011/02/actorregistry-scope-using-akka-in-osgi.html
1 回答
根据我的记忆,
ActorRegistry
是早期版本的Akka中的单身人士,而且从我现在的代码中可以看到,it no longer is . 现在ActorRegistry
是一个final类,为Actor伴侣对象创建了一个实例:因此,您显然可以创建多个注册表实例 .
其次,如你所知,actor在
ActorRegistry
中以start
/stop
方法注册/注销自己,因此,在你的情况下,我将以子类化/混合Actor
/LocalActorRef
结束(重载start
/stop
负责注册,并在此处添加你的功能'寻找)和/或添加自己的ActorRegistry
.