现在我正在看Play Framework并且非常喜欢它。在 Play 中提供的功能中,大量宣传的部分之一是Akka。
为了更好地理解 Akka 以及如何正确使用它,您能告诉我在其他语言或产品中有哪些替代方案吗?
RabbitMQ与它相比如何?有很多重叠吗?一起使用它们实用吗?在哪些用例中?
现在我正在看Play Framework并且非常喜欢它。在 Play 中提供的功能中,大量宣传的部分之一是Akka。
为了更好地理解 Akka 以及如何正确使用它,您能告诉我在其他语言或产品中有哪些替代方案吗?
RabbitMQ与它相比如何?有很多重叠吗?一起使用它们实用吗?在哪些用例中?
我使用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。
最好的起点是很棒的 Akka 官方文档。我认为最接近 Akka 的产品/框架是erlang语言。我猜(我没有使用 Play 框架)Akka 是用来实现 Comet 和其他异步处理的。
rabbitmq在思想上有些相似(用于发送消息的基础设施),请注意 RabbitMQ 甚至是用erlang编写的,但它们的用例略有不同。我想说的是,虽然 RabbitMQ 专注于消息传递,但 Akka 更多的是关于参与者(消息接收者和发送者)。
当 Play 2.0 加入 Typesafe 并开始更多地使用 Akka 时,我也经历了同样的思考过程,我能提供的最佳建议是搜索“Actor 模型”。
维基百科是一个很好的资源 - http://en.wikipedia.org/wiki/Actor_model。它有一个可以支持 Actor 模型的编程语言列表,也有一个基于 Actor 模型的框架列表(包括 Akka)。
简而言之,Actor 模型基于并发计算模型中的 Actor 概念。Actors 并不一定意味着传递消息,但最常见的用例将让 Actors 传递消息(这就是与 rabbitMQ 的相似之处所在)。
你也可以考虑使用 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 )
Akka 是一个用于构建并发和分布式系统的工具包和运行时。为了实现这一点,Akka 使用了 Actor 模型。如果您正在寻找 Akka 的替代方案,我认为您找不到像 Akka 这样的完整解决方案,因为 Akka 有几个功能可以让您开发强大的并发和分布式系统:
但我建议看看Erlang/OTP和Quasar。
http://scalecube.io是一个低延迟的微服务库。一个完整的解决方案,使您能够开发强大的并发和分布式系统。
像 Akka: - 它基于八卦和游泳协议。- 它的消息基于 protobuf(全双工)驱动。- 它用于JVM。- 低延迟,大约快 6 倍。- 使用被证明比 akka 流更快的 RxJava。
与 Akka 不同: - 它不那么自以为是 - 不是一个框架。- 不强制将 Actor 模式作为整体模式。