【发布时间】:2013-05-16 19:02:44
【问题描述】:
我正在启动一个新项目(基于 Java)。我需要将其构建为模块化、分布式和弹性架构。
因此,我希望业务流程能够在它们之间进行通信,可以互操作,但也可以独立。
我现在正在研究两个框架,它们除了年龄差异外,还表达了两种不同的观点:
- 阿卡 (http://akka.io)
- 反应堆 (https://github.com/reactor/reactor)
在选择上述框架之一时我应该考虑什么?
据我目前所知,Akka 仍然以某种方式耦合(在某种程度上,我必须“选择”我想向其发送消息的演员),但非常有弹性。虽然 Reactor 是松散的(基于事件发布)。
有人可以帮助我了解如何做出正确的决定吗?
更新
在更好地审查了 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
- Reactor,早期,绑定到 Spring
我的解释正确吗?但是Akka 中的 Actor 和 Reactor 中的 Consumer 在概念上有何区别?
【问题讨论】:
-
Akka 不一定会被 Scala 使用,事实上,大多数使用它来自 Java。
-
David:类似于:Akka EventBus API 与 Akka Actors 一起实现反应堆模式
-
澄清一下:Reactor 根本不绑定到 Spring。我们有意排除任何 Spring 依赖项,因为作为一个基础框架,将其仅限于 Spring 用户使用是没有意义的。至于 Actor 和 Consumer 之间的区别:就 Reactor 而言,您的 Consumer 可以是有状态的,也可以是无状态的。假设您希望使用无状态匿名类或 Java 8 lambda,但这不是必需的。就像我在回答中提到的那样,对于早期迭代,Reactor 工具集是有意简洁的。我们并不是要创造“下一个 Akka”。
-
只提到vertx.io,因为我相信它属于同一个事件驱动领域,对于那些正在研究的人来说,它具有一些类似的有趣概念。..
-
几年后,我也处于类似情况,我的应用程序主要是基于弹簧的,我现在需要处理事件驱动的功能。是否有明显的赢家 b/w Akka 和 Spring-reactor?我正在寻找一个具有活跃用户社区的框架,以防遇到更复杂的场景。
标签: java spring akka reactor project-reactor