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