比如我将拥有Actor1和Actor2互相通信。什么是启动使用这些actor的入口点?(例如:1.将其放在那里2.更改配置3.获取对演员的引用)
我找到了http://doc.akka.io/docs/akka/2.2-M3/general/configuration.html但它没有为我提供粘合剂。只想得到集成的真实示例。
是否有一些简单的集成示例?
编辑: 应用程序执行一些搜索,从外部获取一些数据,将信息存储到文件中。
该应用程序非常大。一些组件/对象可以离开自己的生活,超出了直接客户端请求的范围,它可以并行执行某些操作。就像一些具有可变状态的单例对象。
事实上,我不确定在哪里可以应用Actor,所以正在调研。但我已经有了很多地方使用了同步块。另外,我相信这可能是使用Actor的信号(因为我不确定,可能忘了加一些同步块,并且当然也没有集成测试)。
至于配置,我不确定是否需要配置一些application.conf文件以让Actors/Akka在其中运行(因为文档本身就有描述)。
我的看法是:
@Component("someManager")
public class SomeManager {
List<Some> something; // mutable state, that why I use locks here.
// methods: add(), delete(), update()
}
我可以将其命名为SomeManagerActor
SomeManager
被从controller
中使用。因此,也需要一个控制器Actor吗?我希望它能够收到反馈(onReceive
()方法)。
这有点有争议...这就是我需要一些示例的另一个原因。
我相信通过摆脱所有的synchronized/whait/notify
东西,把责任转移到actors上,使用消息作为与它们之间通信的方式,我可以改进应用程序。
或者像this这样,它可以成为写入属性文件的actor:
编辑:
例如,目前我找到的方法:要使Actor1向Actor2发送消息,我使用了一个技巧:
// somewhere in existing code
public void initActors() {
ActorSystem system = ActorSystem.create(example");
// initializing
final ActorRef actor1 = system.actorOf(Props.create(Actor1.class), "actor1");
}
Actor1有一个方法
preStart()
,一旦我获取到它的引用(如上所述),就会立即启动它,并向Actor2发送消息。@Override
public void preStart() {
但我不确定这是初始化两个actor执行任务的好方法。