现在我正在看Play Framework并喜欢它。在Play中提供的功能中广告的部分之一是Akka。
为了更好地了解Akka以及如何正确使用它,您能否告诉我其他语言或产品有哪些替代方案?
RabbitMQ与它相比如何?有很多重叠吗?将它们一起使用是否实用?在什么用例?
答案 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最接近的产品/框架是erlang语言。我猜测(我没有使用Play框架)Akka用于实现Comet和其他异步处理。
rabbitmq在想法(发送消息的基础结构)方面有些相似,请注意RabbitMQ甚至用erlang编写,但它们的用例略有不同。我想说,虽然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有几个功能可以让您开发强大的并发& 分发系统:
但我建议您查看Erlang/OTP和Quasar。
答案 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)