25

现在我正在看Play Framework并且非常喜欢它。在 Play 中提供的功能中,大量宣传的部分之一是Akka

为了更好地理解 Akka 以及如何正确使用它,您能告诉我在其他语言或产品中有哪些替代方案吗?

RabbitMQ与它相比如何?有很多重叠吗?一起使用它们实用吗?在哪些用例中?

4

6 回答 6

20

我使用RabbitMQ + Spring AMQP + Guava 的 EventBus 使用 Guava 的 EventBus 自动注册 Actor-like messengers 以匹配接收到的消息。

与 Spring AMQP 和 Akka 的相似性是不可思议的。Spring AMQP 的SimpleMessageListenerContainer + MessageListener几乎等同于一个 Actor。

然而,就所有意图和目的而言,RabbitMQ 比 Akka 更强大,因为它有许多不同语言的客户端实现提供持久性(持久队列)、拓扑路由可插入的 QoS 算法

话虽如此,Akka 更方便,理论上 Akka 可以完成上述所有工作,有些人已经编写了扩展,但大多数人只是使用 Akka,然后让 Akka 通过 RabbitMQ 传递消息。此外,Spring AMQP SimpleMessageListener 容器有点重,如果你创建了几百万个容器会发生什么,还不清楚。

事后看来,我会考虑在未来的项目中使用 Akka 到 RabbbitMQ 而不是 Spring AMQP。

于 2012-08-03T01:08:14.447 回答
16

最好的起点是很棒的 Akka 官方文档。我认为最接近 Akka 的产品/框架是语言。我(我没有使用 Play 框架)Akka 是用来实现 Comet 和其他异步处理的。

在思想上有些相似(用于发送消息的基础设施),请注意 RabbitMQ 甚至是用编写的,但它们的用例略有不同。我想说的是,虽然 RabbitMQ 专注于消息传递,但 Akka 更多的是关于参与者(消息接收者和发送者)。

于 2012-04-22T14:22:51.390 回答
9

当 Play 2.0 加入 Typesafe 并开始更多地使用 Akka 时,我也经历了同样的思考过程,我能提供的最佳建议是搜索“Actor 模型”。

维基百科是一个很好的资源 - http://en.wikipedia.org/wiki/Actor_model。它有一个可以支持 Actor 模型的编程语言列表,也有一个基于 Actor 模型的框架列表(包括 Akka)。

简而言之,Actor 模型基于并发计算模型中的 Actor 概念。Actors 并不一定意味着传递消息,但最常见的用例将让 Actors 传递消息(这就是与 rabbitMQ 的相似之处所在)。

于 2012-04-22T15:58:41.343 回答
2

你也可以考虑使用 Vertx,它也是一个 Reactive 平台http://vertx.io/

在那里您可以考虑类似于 Actor 范例的 Verticle( http://vertx.io/docs/vertx-core/java/#_verticles )。和Akka的Databus类似的EventBus( http://vertx.io/docs/vertx-core/java/#event_bus )

于 2017-09-12T06:59:26.157 回答
2

Akka 是一个用于构建并发分布式系统的工具包和运行时。为了实现这一点,Akka 使用了 Actor 模型。如果您正在寻找 Akka 的替代方案,我认为您找不到像 Akka 这样的完整解决方案,因为 Akka 有几个功能可以让您开发强大的并发分布式系统:

  • 阿卡演员
  • 演员路由、监督和监控
  • 异步和非阻塞消息传递
  • Akka Cluster(用于集群管理)
  • Akka 持久性(用于实现事件溯源、持久性参与者和至少一次传递消息传递)
  • Akka I/O(用于 TCP 和 UDP 通信)
  • Akka HTTP(用于作为客户端或服务器的 HTTP 通信)
  • Akka Stream(用于流处理)
  • ...

但我建议看看Erlang/OTPQuasar

于 2016-04-12T04:49:35.983 回答
1

http://scalecube.io是一个低延迟的微服务库。一个完整的解决方案,使您能够开发强大的并发和分布式系统。

像 Akka: - 它基于八卦和游泳协议。- 它的消息基于 protobuf(全双工)驱动。- 它用于JVM。- 低延迟,大约快 6 倍。- 使用被证明比 akka 流更快的 RxJava。

与 Akka 不同: - 它不那么自以为是 - 不是一个框架。- 不强制将 Actor 模式作为整体模式。

于 2017-09-11T21:12:53.203 回答