阿卡或反应堆 [已关闭]

2022-08-31 10:22:59

我正在开始一个新项目(基于java)。我需要将其构建为模块化、分布式和弹性架构。

因此,我希望业务流程能够相互通信,可互操作,但也要独立。

我现在正在研究两个框架,除了年龄差异之外,还表达了两种不同的观点:

选择上述框架之一时,我应该考虑什么?

据我所知,Akka仍然以某种方式耦合(在某种程度上,我必须“选择”我想向其发送消息的演员),但非常有弹性。虽然反应器是松散的(基于事件发布)。

有人可以帮助我了解如何做出正确的决定吗?

更新

在更好地审查了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");

因此,在我看来,现在两者之间的主要区别是:

  • Akka,更成熟,绑定到类型安全
  • 反应器,早期阶段,与弹簧结合

我的解释是否正确?但是,从概念上讲,Akka中的Actor和Reactor中的消费者之间的区别是什么


答案 1

在这一点上很难说,因为反应堆仍然是一个草图,我(Akka技术负责人)对它将走向何方没有洞察力。看看反应堆是否成为Akka的竞争对手将会很有趣,我们对此充满期待。

据我所知,从你的要求列表中,Reactor缺少弹性(即在Akka中监督给你什么)和位置透明度(即以一种让你通过本地或远程消息传递进行抽象的方式引用活动实体;这就是你所说的“分布式”)。对于“模块化”,我对Reacter知之甚少,特别是如何查找活动组件并管理它们。

如果你现在开始一个真正的项目,并且需要一些满足你第一句话的东西,那么我认为在这一点上推荐Akka是没有争议的(正如Jon也指出的那样)。请随时在SO或akka用户邮件列表中提出更具体的问题。


答案 2

反应器不绑定到Spring,它是一个可选模块。我们希望 Reactor 是便携式的,正如 Jon 所概述的那样,这是一个基础。

我不会对在生产中推动,因为我们甚至不是Milestone(1.0.0.SNAPSHOT),在这方面,我会更深入地研究Akka,这是一个很棒的异步框架IMO。还要考虑Vert.xFinagle,如果你寻找一个平台(前者)或可组合期货(后者),它们可能会被调整。如果您关注各种异步模式,也许GPars将为您提供更完整的解决方案。

最后,我们肯定会有重叠,事实上,我们倾向于混合方法(灵活的可组合事件,分布式,并且不绑定到任何调度策略),您可以在其中轻松找到RxJavaVert.xAkka等的位。我们甚至对语言的选择并不固执己见,即使我们坚定地致力于Groovy,人们已经开始ClojureKotlin移植。除此之外,一些需求是由Spring XDGrails驱动的。

非常感谢您的见证兴趣,希望您在几个月内会有更多的比较点:)


推荐