首页 文章

Akka或Reactor [关闭]

提问于
浏览
81

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

因此,我希望业务流程能够相互通信,具有互操作性,同时也是独立的 .

我现在正在寻找两个框架,除了它们的年龄差异外,还表达了两种不同的观点:

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

据我所知,到目前为止,Akka仍然以某种方式耦合(在某种程度上我必须'选择'我要发送消息的演员),但非常有弹性 . 虽然Reactor是松散的(基于事件发布) .

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

UPDATE

在更好地回顾了Akka的Event Bus之后,我相信features expressed by 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,更成熟,受到Typesafe的约束

  • 反应堆,早期阶段,必然是 Spring 天

我的解释是否正确?但 what is conceptually the difference between the Actor in Akka and the Consumer in Reactor

3 回答

  • 35

    在这一点上很难说,因为Reactor仍然是一个草图,而我(Akka tech lead)并没有深入了解它的发展方向 . 看看Reactor是否成为Akka的竞争者将会很有趣,我们期待着这一点 .

    据我所知,从您的需求列表中,Reactor缺少弹性(即监控在Akka中为您提供的)和位置透明性(即以一种方式引用活动实体,使您可以通过本地或远程消息传递;这就是您暗示“分布式”) . 对于“模块化”,我对Reactor了解不多,特别是如何查找活动组件并对其进行管理 .

    如果你现在开始一个真正的项目并需要满足你的第一句话的东西,那么我认为在这一点上推荐Akka并不会引起争议(正如Jon所说) . 随意在SO或akka-user mailing list上提出更具体的问题 .

  • 30

    Reactor不受Spring限制,它是一个可选模块 . 我们希望Reactor可以移植,这是Jon概述的基础 .

    我不会对推动 生产环境 充满信心,因为我们甚至不是Milestone(1.0.0.SNAPSHOT),在这方面,我会更深入地了解Akka,这是一个非常棒的异步框架IMO . 还可以考虑Vert.x和Finagle,如果您寻找平台(前者)或可组合期货(后者),可能会对其进行调整 . 如果您管理各种异步模式,GPars可能会为您提供更完整的解决方案 .

    最后,我们可能肯定会有重叠,事实上我们倾向于混合方法(灵活的可组合事件,分布式,并且不受任何调度策略约束),您可以轻松地从RxJava,Vert.x,Akka等中找到位 . 我们甚至对语言选择都没有意见,即使我们坚定地致力于Groovy,人们已经开始使用Clojure和Kotlin端口了 . 除此之外,还有一些需求由Spring XDGrails驱动的事实 .

    非常感谢您亲眼目睹的兴趣,希望您在几个月内获得更多的比较点:)

  • 42

    这是一个很好的问题,答案将在未来几周内发生变化 . 我们现在无法做出任何节点间通信的承诺,因为它太早了 . 在我们演示Reactor中的聚类之前,我们仍然需要将一些部分放在一起 .

    话虽如此,只是因为Reactor并不意味着它不能 . :)人们只需要一个相当薄的网络层来协调Reactors之间使用像Redis或AMQP这样的东西给它一些集群智能 .

    我们肯定在Reactor中讨论和规划分布式场景 . 要确切说明它是如何起作用还为时过早 .

    如果你现在需要集群的东西,那么选择Akka会更安全 .

相关问题