如果我已经有java
使用spring
和servlet
容器的现有 Web 应用程序。将 Akka 集成到其中的正确方法是什么?
就像我将要拥有Actor1
的Actor2
那样相互交流。开始使用这些演员的切入点是什么?(例如:1. 放在那里 2. 更改配置 3. 获取参与者的引用)
我找到了http://doc.akka.io/docs/akka/2.2-M3/general/configuration.html但他没有给我胶水。只是想获得集成的真实示例。
有一些简单的集成示例吗?
编辑: 应用程序进行一些搜索,从外部获取一些数据,将信息存储到文件中。
应用程序相当大。一些组件/对象可以离开自己的生命,即出于客户端的直接请求,它可以做一些并行的事情。就像一些具有可变状态的单例对象一样。
问题是我不知道我可以在哪里申请演员,我正在调查它。但是我已经在这里和那里有很多同步块。
而且,我相信,这已经是演员可能被应用的一种迹象。(因为我不确定,可能我忘了放一些synchronized,当然也没有集成测试)
关于配置,我只是不确定是否应该配置一些 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
东西,将责任转移给演员,使用消息作为他们之间/之间的沟通方式来改进应用程序。
或者像这样,它可能是写入属性文件的参与者:
编辑:
例如,现在我发现:为了让 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() {
但我不确定为什么要初始化两个演员来完成他们的工作。