Akka的语言和产品替代方案是什么?

时间:2012-04-22 14:07:18

标签: playframework rabbitmq akka actor

现在我正在看Play Framework并喜欢它。在Play中提供的功能中广告的部分之一是Akka

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

RabbitMQ与它相比如何?有很多重叠吗?将它们一起使用是否实用?在什么用例?

6 个答案:

答案 0 :(得分:18)

我使用RabbitMQ + Spring AMQP + Guava的EventBus,使用Guava's EventBus for pattern matching收到的消息自动注册类似Actor的信使。

与Spring AMQP和Akka的相似之处是不可思议的。 Spring AMQP的SimpleMessageListenerContainer + MessageListener 几乎相当于一个Actor。

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

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

事后我会考虑将Akka用于RabbbitMQ而不是Spring AMQP用于未来的项目。

答案 1 :(得分:13)

最佳起点是great Akka official documentation。我认为与Akka最接近的产品/框架是语言。我猜测(我没有使用Play框架)Akka用于实现Comet和其他异步处理。

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

答案 2 :(得分:8)

我可以提供最好的建议,因为当Play 2.0加入Typesafe并开始使用Akka时,我也经历了相同的思考过程,就是搜索“Actor模型”。

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

简单地说,Actor模型基于并发计算模型中actor的概念。 Actors并不一定意味着传递消息,但是大多数常见的用例都会让actor传递消息(这与RabbitMQ的相似之处将会出现)。

答案 3 :(得分:2)

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

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

但我建议您查看Erlang/OTPQuasar

答案 4 :(得分:1)

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

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

与Akka不同: - 它不太自以为是 - 不是框架。 - 不要将Actor模式强制为整体模式。

答案 5 :(得分:0)

您还可以考虑使用Vertx,它也是一个反应平台http://vertx.io/

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