我正在开始一个新项目(基于java)。我需要将其构建为模块化,分布式和弹性架构。
因此,我希望业务流程能够相互通信,具有互操作性,但也是独立的。
我现在正在寻找两个框架,除了它们的年龄差异外,还表达了两种不同的观点:
选择上述框架之一时我应该考虑什么?
据我所知,到目前为止,Akka仍然以某种方式耦合(以某种方式我必须'选择'我要发送消息的演员),但非常有弹性。虽然Reactor是松散的(基于事件发布)。
有人可以帮我理解如何做出正确的决定吗?
更新
在更好地审核了Akka的Event Bus后,我相信{* 3}}已经包含在Akka中了。
例如,features expressed by Reactor上记录的订阅和事件发布可以在Akka中表达如下:
final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
new UntypedActorFactory() {
@Override
public Actor create() throws Exception {
return new UntypedActor() {
final LoggingAdapter log = Logging.getLogger(
getContext().system(), this);
@Override
public void onReceive(Object message)
throws Exception {
if (message instanceof String)
log.info("Received String message: {}",
message);
else
unhandled(message);
}
};
}
}), "actor");
system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");
因此,现在我觉得两者之间的主要区别是:
我的解释是否正确?但概念上Akka中的Actor和Reactor中的Consumer之间的差异?
答案 0 :(得分:44)
在这一点上很难说,因为Reactor仍然是一个草图,而我(Akka tech lead)并没有深入了解它将走向何方。看看Reactor是否成为Akka的竞争者将会很有趣,我们期待着这一点。
据我所知,从您的需求列表中,Reactor缺少弹性(即监督在Akka中为您提供的)和位置透明性(即以一种方式引用活动实体,使您可以通过本地或远程消息传递进行抽象;是你所谓的“分布式”)。对于“模块化”,我对Reactor了解不多,特别是如何查找活动组件并对其进行管理。
如果你现在开始一个真正的项目并需要满足你的第一句话的东西,那么我认为在这一点上推荐Akka并不会引起争议(正如Jon所说)。随意在SO或akka-user mailing list上提出更具体的问题。
答案 1 :(得分:35)
Reactor没有绑定到Spring,它是一个可选模块。我们希望Reactor可以移植,这是Jon概述的基础。
我不会对推动生产充满信心,因为我们甚至不是Milestone(1.0.0.SNAPSHOT),在这方面,我会深入了解 Akka 这是一个太棒了异步框架IMO。还可以考虑 Vert.x 和 Finagle ,如果您寻找平台(前者)或可组合期货(后者),可能会对其进行调整。如果您管理各种异步模式, GPars 可能会为您提供更完整的解决方案。
最后,我们肯定会有重叠,实际上我们倾向于采用混合方法(灵活的可组合事件,分布式,而不是绑定到任何调度策略),您可以轻松地从 RxJava <中找到位/ em>, Vert.x , Akka 等。我们甚至不满足于语言选择,即使我们坚定地致力于Groovy,人们已经开始 Clojure 和 Kotlin 端口。除此之外,还有一些要求由Spring XD和Grails驱动。
非常感谢您亲眼目睹的兴趣,希望您在几个月内获得更多的比较点:)
答案 2 :(得分:31)
这是一个很好的问题,答案将在未来几周内发生变化。我们现在无法做出任何节点间通信的承诺,因为它太早了。在我们演示Reactor中的聚类之前,我们仍然可以将一些部分放在一起。
话虽如此,仅仅因为Reactor没有进行节点间通信,OOTB并不意味着不能。 :)人们只需要一个相当薄的网络层来协调Reactors之间使用像Redis或AMQP这样的东西给它一些集群智能。
我们肯定在Reactor中讨论和规划分布式场景。要确切说明它是如何起作用还为时过早。
如果您现在需要集群化的东西,那么选择Akka会更安全。