我在一个JVM上用Akka开发了我的应用程序.现在我想在多台机器上分配工作负载.我开始阅读文档并感到困惑.
有两种方法可以通过聚类和远程处理来分发Akka应用程序.我没有区分这两者.如果我理解正确两者都相互排除,因为在配置中需要使用不同的提供者作为参与者:
akka.remote.RemoteActorRefProvider
akka.cluster.ClusterActorRefProvider
Run Code Online (Sandbox Code Playgroud)
那么用例是什么?当我选择一个而不是另一个?
也许聚类就像遥控器的超集,或者反过来可能是另一种方式?
假设你有很多方法:
def foo() : Try[Seq[String]]
def bar(s:String) : Try[String]
Run Code Online (Sandbox Code Playgroud)
你想做一个for-comprhension:
for {
list <- foo
item <- list
result <- bar(item)
} yield result
Run Code Online (Sandbox Code Playgroud)
当然这不会编译,因为在此上下文中Seq不能与Try一起使用.
任何人都有一个很好的解决方案如何写这个干净而不会分成两个单独的?
我在三分之一的时间里遇到过这种语法问题,并认为现在是时候问这个了.
我有一个行为的演员:
def receive: Receive = {
case Info(message) =>
val res = send("INFO:" + message)
installAckHook(res)
case Warning(message) =>
val res = send("WARNING:" + message)
installAckHook(res)
case Error(message) =>
val res = send("ERROR:" + message)
installAckHook(res)
}
private def installAckHook[T](fut: Future[T]): Unit = {
val answerTo = sender()
fut.onComplete {
case Success(_) => answerTo ! "OK"
case Failure(ex) => answerTo ! ex
}
}
private def send(message: String): Future[HttpResponse] = {
import context.system
val payload: Payload = Payload(text = message, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用猫库,但我很难在导入和创建的东西之间导航.我的问题如下:
sealed trait Checks
case class CheckViolation(id: Long, msg: String) extends Checks
case class ChecksPassed(ids: Seq[Long]) extends Checks
Run Code Online (Sandbox Code Playgroud)
这是我想要使用的数据结构.每个违规都应该作为具有msg的对象保存,传递的检查可以聚合为仅保存id.
object BusinessRuleSetValidation extends App {
type BRValidationResult = Validated[NonEmptyList[CheckViolation], ChecksPassed]
def run(): BRValidationResult = {
implicit val monoidChecksPassed = new Monoid[ChecksPassed] {
override def empty: ChecksPassed = ChecksPassed(Seq())
override def combine(x: ChecksPassed, y: ChecksPassed): ChecksPassed = ChecksPassed(x.ids ++ y.ids)
}
val check1: BRValidationResult = valid(ChecksPassed(2L))
val check2: BRValidationResult = invalidNel(CheckViolation(1, "This check was violated"))
val check3: BRValidationResult = invalidNel(CheckViolation(2, "This is …Run Code Online (Sandbox Code Playgroud) 假设我有一个像这样的代码:
trait Holder {
type Value
def put(v:Value)
}
class JsonHolder extends Holder {
override type Value = String
def put(v: JsonHolder.this.Value): Unit = {}
}
class XmlHolder extends Holder {
override type Value = String
def put(v: XmlHolder.this.Value): Unit = {}
}
object Foo {
def main(args: Array[String]) {
val jsonHolder = new JsonHolder
val xmlHodler = new XmlHolder
val valueOfJson = new jsonHolder.Value("AAA")
val valueOfXml = new xmlHodler.Value("AAA")
jsonHolder.put(valueOfXml)
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白这为什么编译.jsonHolder.put(valueOfXml)不应该出现类型错误吗?
如果我改变
type Value
Run Code Online (Sandbox Code Playgroud)
这样的事情:
case class …Run Code Online (Sandbox Code Playgroud)