import akka.pattern.pipe
val horseList : Future[Seq[Horse]] = horseRepository.listHorses(...)
horseList pipeTo sender()
val behaviour : Behavior[ListHorses] = Behaviors.receive {
(ctx,msg) => msg match {
case ListHorses(replyTo) =>
val horseListF : Future[Seq[Horse]] = horseRepository.listHorses(...)
// -> how do I make horseListF's content end up at replyTo? <-
Behaviors.same
}
}
我该怎么做?
在Akka 2.5.22(可能更早)中有上下文。pipetoSelf
:
def pipeToSelf[Value](future: Future[Value])(mapResult: Try[Value] => T): Unit
您仍然必须为success
和failure
提供模式匹配,在我的代码中,我使用以下内容减少了这种匹配:
def mapPipe[A, T](success: A => T, failure: Throwable => T): Try[A] => T = {
case Success(value) => success(value)
case Failure(e) => failure(e)
}
导致如下调用:
case class Horses(horses: Seq[Horse]) extends Command
case class HorseFailure(e: Throwable) extends Command
...
context.pipeToSelf(horseList) {
mapPipe(Horses,HorseFailure)
}
问题内容: 什么是Java相当于ManualResetEvent? 问题答案: 我所知道的最接近的是信号量。只需将其“许可”计数为1即可使用,获得/释放将与您从中获得的信息几乎相同。 初始化为一个的信号灯可以用作互斥锁,该信号灯最多只能使用一个许可。这通常被称为二进制信号量,因为它只有两种状态:一个许可可用,或零许可可用。当以这种方式使用时,二进制信号量具有属性(与许多Lock实现不同),该“锁”
问题内容: 我有一个Bash shell脚本,我想在其中暂停执行,直到用户按下某个键为止。在DOS中,可以使用“ pause”命令轻松完成此操作。我可以在脚本中使用等效的Linux吗? 问题答案: 做这个: 该指定它只是等待一个字符。在将其放入原始模式,这是必要的,否则,如果按类似反斜杠,它不会注册,直到你遇到下一个关键。在指定的提示,如果包含空格,必须用引号括起来。仅当您想知道他们按下了哪个键时
可扩展的实时事务处理 我们相信编写出正确的、具有容错性和可扩展性的并发程序太困难了。这多数是因为使用了错误的工具和错误的抽象级别。Akka就是为了改变这种状况而生的。通过使用Actor模型我们提升了抽象级别,为构建可扩展的、有弹性的响应式并发应用提供了一个更好的平台——详见《响应式宣言》 。在容错性方面我们采用了“let it crash”(让它崩溃)模型,该模型已经在电信行业构建出“自愈合”的应
假设我正在为Akka(类型化)执行元定义一个行为,该行为将执行并发计算,将其结果报告给生成它的执行元,然后停止。 如果我用计算的所有输入初始化这个actor,加上对它的“父级”的引用,那么它将永远不需要接收任何类型的传入消息。 我将使用创建此行为,向它传递一个执行计算的函数,然后返回。 Akka(Typed)要求我为将返回此行为的函数提供某种的结果类型。虽然我可以为分配行为将发送的结果消息的类型,
问题内容: 因此,我习惯于在Angular中使用工厂和服务。 我正在阅读Angular2文档,但看不到任何等效的工厂。Angular2的等效项是什么? 问题答案: 工厂,服务,常量和值都在Angular2中消失了。Angular2与经典Angular有根本性和根本性的不同。在Angular2中,核心概念是 组件 依赖注入 捆绑 服务,工厂,提供者和常量的概念在Angular 1中受到了批评。很难在
假设我有两个Kafka流(Kafka流scala库,版本2.2.0): 以及他们的加入: KSQL中WHERE子句的等价物是什么?(参见最新订单流)了解流API?使用stream3是个好主意。滤器这种方法的效率是否与KSQL创建的流相同?