Dav*_*lli 90 java spring reactor akka project-reactor
我正在开始一个新项目(基于java).我需要将其构建为模块化,分布式和弹性架构.
因此,我希望业务流程能够相互通信,具有互操作性,但也是独立的.
我现在正在寻找两个框架,除了它们的年龄差异外,还表达了两种不同的观点:
选择上述框架之一时我应该考虑什么?
据我所知,到目前为止,Akka仍然以某种方式耦合(在某种程度上我必须'选择'我要发送消息的演员),但非常有弹性.虽然Reactor是松散的(基于事件发布).
有人可以帮我理解如何做出正确的决定吗?
UPDATE
在更好地回顾了Akka 的事件总线之后,我相信Reactor表达的功能已经在某种程度上已经包含在Akka中.
例如,https://github.com/reactor/reactor#events-selectors-and-consumers上记录的订阅和事件发布可以在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");
Run Code Online (Sandbox Code Playgroud)
因此,在我看来,两者之间的主要区别是:
我的解释是否正确?但概念上,Akka中的Actor和Reactor中的Consumer之间的区别是什么?
Rol*_*uhn 46
在这一点上很难说,因为Reactor仍然是一个草图,而我(Akka tech lead)并没有深入了解它的发展方向.看看Reactor是否成为Akka的竞争对手将会很有趣,我们期待着这一点.
据我所知,从您的需求列表中,Reactor缺少弹性(即监督在Akka中为您提供的)和位置透明性(即以一种方式引用活动实体,让您通过本地或远程消息传递进行抽象;这就是您暗示"分布式").对于"模块化",我对Reactor知之甚少,特别是如何查找活动组件并对其进行管理.
如果你现在开始一个真正的项目并需要满足你的第一句话的东西,那么我认为在这一点上推荐Akka并不会引起争议(正如Jon所说).随意在SO或akka用户邮件列表上询问更具体的问题.
小智 37
Reactor不受Spring限制,它是一个可选模块.我们希望Reactor可以移植,这是Jon概述的基础.
我不会对推动生产充满信心,因为我们甚至不是Milestone(1.0.0.SNAPSHOT),在这方面,我会更深入地了解Akka,这是一个非常棒的异步框架IMO.还可以考虑Vert.x和Finagle,如果您寻找平台(前者)或可组合期货(后者),可能会对其进行调整.如果您管理各种异步模式,GPars可能会为您提供更完整的解决方案.
最后,我们肯定会有重叠,实际上我们倾向于混合方法(灵活的可组合事件,分布式,并且不受任何调度策略约束),您可以轻松地从RxJava,Vert.x,Akka等中找到位.我们甚至对语言的选择一无所知,即使我们坚定地致力于Groovy,人们已经开始使用Clojure和Kotlin端口了.除此之外,还有一些需求由Spring XD和Grails驱动.
非常感谢您亲眼目睹的兴趣,希望您在几个月内获得更多的比较点:)
Jon*_*bin 32
这是一个很好的问题,答案将在未来几周内发生变化.我们现在无法做出任何节点间通信的承诺,因为它太早了.在我们演示Reactor中的聚类之前,我们还有一些部分可以放在一起.
话虽如此,仅仅因为Reactor不做节点间通信OOTB并不意味着它不能.:)人们只需要一个相当薄的网络层来协调Reactors之间使用像Redis或AMQP这样的东西给它一些集群智能.
我们肯定在Reactor中讨论和规划分布式场景.要确切说明它是如何起作用还为时过早.
如果你现在需要集群化的东西,那么选择Akka会更安全.