标签: akka

Scala中间件选择有什么区别?

注意: 不幸的是这个问题已经关闭,但是如果有其他人提出同样的问题,我正试图维护它.

我一直在寻找在Scala中开发服务的良好解决方案,该服务将位于移动设备和现有Web服务之间.

目前可行的选项清单是:

那里可能有更多的选择.如何决定使用哪一个?什么是一个好的Scala中间件选择的特征(借口双关语;-).一方面,我想去Akka,因为它是TypeSafe Scala堆栈的一部分,但另一方面,像Finagle这样的东西有一组丰富的库,使管道变得如此简单.喷雾看起来很好用,很简单.

任何建议,见解或经验将不胜感激.我相信那里的某些人必须有一些经验,他们不介意分享.

更新:

我很乐意重新开启这个问题.这个问题的一个很好的答案将有助于新的Scalateers避免相关的陷阱.

更新2:

这些是我自问这个问题后的经验:

Finagle - 我用Finagle进行了一个项目,它坚如磐石.

喷雾 - 在我的最新项目中,我正在使用Spray,我非常高兴.最新版本基于Akka 2构建,您可以使用Spray-can库直接运行它,无需Web服务器.Spray是一组库,而不是框架,非常模块化.在了解喷雾:在阿卡视频REST给出了一个很好的概述,而这个博客在Cakesolutions显示了一个非常好的发展方式和结构.

更新3:

生活移动得非常快.如果你不停下来,偶尔环顾四周,你可能会错过它.- Ferris Bueller

这些天选择变得更加简单.在我的拙见中,Spray赢得了这场战斗.它被整合到Akka中,成为下一个Akka HTTP.我现在一直在使用Spray进行多个项目,并且可以诚实地说它是我遇到的奇妙和最好的支持软件.

这不能回答最初的问题,但至少可以说明为什么Spray在大多数情况下似乎是最佳选择.它非常灵活,无阻塞且非常稳定.它有客户端和服务器端库以及一个很棒的测试工具包.另外,请查看这些统计信息以了解性能:Web框架基准测试

scala akka spray finagle

63
推荐指数
1
解决办法
6041
查看次数

Scala中的Akka,感叹号和问号

向Actors发送消息时感叹号(!)和问号(?)之间有什么区别?

myActor ! Hello(value1)
myActor ? Hello(value1)
Run Code Online (Sandbox Code Playgroud)

scala operators actor akka

63
推荐指数
2
解决办法
2万
查看次数

Akka - 你应该创建多少个演员实例?

我是Akka框架的新手,我正在Netty + Akka上构建一个HTTP服务器应用程序.

到目前为止,我的想法是为每种类型的请求创建一个actor.例如,我有一个POST到/ my-resource的actor和另一个GET到/ my-resource的actor.

在哪里我感到困惑的是我应该如何创作演员呢?我是不是该:

  1. 为每个请求创建一个新的actor(我的意思是我应该为每个请求做一个相应的actor的TypedActor.newInstance())?创建新演员有多贵?

  2. 在服务器启动时创建每个actor的一个实例,并为每个请求使用该actor实例?我读过一个演员一次只能处理一条消息,所以这不是瓶颈吗?

  3. 做点别的吗?

感谢您的任何反馈.

scala akka

62
推荐指数
4
解决办法
2万
查看次数

我是否需要重复使用相同的Akka ActorSystem,或者我可以在每次需要时创建一个?

Akka 2.x需要很多命令才能引用ActorSystem.因此,要创建一个actor的实例,MyActor您可能会说:

val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])
Run Code Online (Sandbox Code Playgroud)

由于经常需要ActorSystem:许多代码示例省略了代码的创建,并假设读者知道system变量的来源.

如果您的代码在不同的地方生成actor,您可以复制此代码,可能创建其他ActorSystem实例,或者您可以尝试ActorSystem通过引用某些全局或通过传递来共享同一实例ActorSystem.

Akka文档提供了"Actor Systems"标题下的actor系统的一般概述,并且有该类的文档ActorSystem.但这些都没有帮助解释为什么Akka的用户不能仅仅依靠Akka来管理这个问题.

问题(S)

  • ActorSystem每次共享同一个对象或创建一个新对象有什么含义?

  • 这里的最佳做法是什么?一直四处走动ActorSystem看起来非常严厉.

  • 一些例子给出了ActorSystem一个名字:ActorSystem("MySystem")其他人只是打电话ActorSystem().这会有什么不同,如果你两次使用相同的名称怎么办?

  • 是否akka-testkit要求您ActorSystem与传递给TestKit构造函数的共享共享?

scala akka

62
推荐指数
1
解决办法
1万
查看次数

如何从演员本身获取Akka演员的名字?

所以,如果我有一个演员,我可以给它一个名字.但是,我可以在内部访问该名称吗?例:

class Actorz extends Actor with ActorLogging {
   val actorName = //??What function

   def receive = {
     case x => log.debug(actorName+": Received Message: "+x)
   }
}

val actor = system.actorOf(Props[Actorz], "named")
actor ! "dogs"
Run Code Online (Sandbox Code Playgroud)

现在,我可以将其名称作为构造函数参数传递.但是,如果有一种方法可以在内部获取名称,那么这似乎是不必要的重复...因为它是在我使用实例化actor时设置的system.actorOf.API文档似乎没有任何内容.

scala akka

60
推荐指数
1
解决办法
2万
查看次数

akka演员中的前锋和告诉之间的区别

如果我发送相同的消息,告诉和转发有什么区别:

case msg: Message =>
  otherActor tell (msg,sender)
Run Code Online (Sandbox Code Playgroud)

case msg: Message =>
  otherActor forward msg
Run Code Online (Sandbox Code Playgroud)

scala actor akka

58
推荐指数
2
解决办法
1万
查看次数

Akka如何在Play中使用?

Play的主页说:

Play基于Akka构建,可为高度可扩展的应用程序提供可预测的最小资源消耗(CPU,内存,线程).

我想知道Akka在Play中的使用方式和位置,以及在Akka上使用Play构建的后果.

scala akka playframework

56
推荐指数
1
解决办法
2万
查看次数

Apache Spark vs Akka

你能否告诉我Apache Spark和AKKA之间的区别,我知道这两个框架都意味着编程分布式和并行计算,但我没有看到它们之间的链接或区别.

此外,我想得到适合他们每个人的用例.

parallel-processing distributed-computing bigdata akka apache-spark

56
推荐指数
3
解决办法
4万
查看次数

不同的Scala Actor实现概述

我正试图找到'正确'的演员实现.我意识到有一堆它们,选择一个有点令人困惑.就个人而言,我对远程演员特别感兴趣,但我想完整的概述会对很多人有所帮助.这是一个非常普遍的问题,所以请随意回答您所了解的实施问题.

我知道以下Scala Actor实现(SAI).请添加缺少的.

  • Scala 2.7(区别)
  • Scala 2.8
  • Akka(http://www.akkasource.org/)
  • 电梯(http://liftweb.net/)
  • Scalaz(http://code.google.com/p/scalaz/)


  • 这些SAI的目标用例是什么(轻量级与"重型"企业框架)?

  • 他们支持远程演员吗?远程参与者在最高审计机关中有哪些缺点?
  • 他们的表现如何?
  • 社区有多活跃?
  • 他们开始有多容易?文档有多好?
  • 它们有多容易扩展?
  • 他们有多稳定?哪些项目正在使用它们?
  • 它们的缺点是什么?
  • 他们的设计原则是什么?
    • 它们是基于线程还是基于事件(接收/响应)或两者兼而有之?
    • 嵌套的receiveS
    • hotswapping Actor的消息循环

scala lift scalaz actor akka

53
推荐指数
4
解决办法
9670
查看次数

如何创建一个可以通过方法调用稍后接收元素的Source?

我想Source在它上面创建一个和后来的推送元素,如:

val src = ... // create the Source here
// and then, do something like this
pushElement(x1, src)
pushElement(x2, src)
Run Code Online (Sandbox Code Playgroud)

建议的方法是什么?

谢谢!

scala akka akka-stream akka-http

50
推荐指数
2
解决办法
1万
查看次数