Scala 使用tell构建restapi
我试图找到一种使用akka和akkahttp创建restapi的好方法。根据文档,请求/回复不是参与者间通信的最佳解决方案。所以我的问题是,如何使用tell实现类似于此片段的功能Scala 使用tell构建restapi,scala,akka,Scala,Akka,我试图找到一种使用akka和akkahttp创建restapi的好方法。根据文档,请求/回复不是参与者间通信的最佳解决方案。所以我的问题是,如何使用tell实现类似于此片段的功能 for { randomNumber <- (actor1 ? GetRandomNumber).mapTo[Int] randomString <- (actor2 ? GetRandomString).mapTo[String] } yield s"Random Strin
for {
randomNumber <- (actor1 ? GetRandomNumber).mapTo[Int]
randomString <- (actor2 ? GetRandomString).mapTo[String]
} yield s"Random String: $randomString, Random Number: $randomNumber"
用于{
randomNumber您可以将收集其他参与者响应的状态合并,并在完全提供时进行处理
在代码中解释这一点,请考虑下面的例子
case类状态(string:Option[string],int:Option[int])
类组合因子(stringActor:ActorRef,intActor:ActorRef)
扩展演员{
覆盖def receive:receive={case}
stringActor!“获取随机字符串”
intActor!“获取随机整数”
been(onMessage(State(string=None,int=None)))
}
私有def onMessage(状态:state):接收={
case msg:String=>
val newState=state.copy(string=Option(msg))
完全提供时(新状态)
context.been(onMessage(newState))
案例消息:Int=>
val newState=state.copy(int=Option(msg))
完全提供时(新状态)
context.been(onMessage(newState))
}
提供专用def时(状态:状态):单位={
if(state.string.nonEmpty&&state.int.nonEmpty){
//在这里处理状态
}
}
}
状态累积是在上下文的帮助下发生的。变为哪个
将演员的行为更改为新的“接收”
(PartialFunction[Any,Unit])处理程序。替换上的当前行为
行为堆栈的顶部
请注意,如果您的参与者同时处理其他消息,那么行为切换将更复杂
如果您不想使用context.been
,私有变量状态:state
作为组合因子的变量字段也可用于实现相同的结果
最后一点,请不要在非类型化的参与者中对消息使用基元类型。如果两个不同的参与者发送相同的基元类型,则代码很难理解,并且可能会出现问题。此代码是假定在http路由内还是在另一个参与者内?您好,欢迎这样做!请阅读,和。请阅读@IvanStanislavciuc在另一个Actor中您是否需要从两个不同的Actor获取数据,并仅在两个Actor返回结果时才继续?@IvanStanislavciuc