我正在使用一个接受单个AKKA接收器并用数据填充它的API:
def fillSink(sink:Sink[String, _])
有没有一种方法,无需深入研究akka的深度,可以使用两个接收器而不是一个接收器来处理输出?
例如
val mySink1:Sink = ...
val mySink2:Sink = ...
//something
fillSink( bothSinks )
如果我可以使用fillSink
方法使用的流程,则可以使用flow.alsoTo(mySink1).to(mySink2)
,但该流程未公开。
目前唯一的解决方法是传递一个处理字符串的Sink,然后将其传递给两个StringBuilder来替换mySink1/mySink2
,但感觉这不符合AKKA的观点。如果不花几天时间学习AKKA,就无法确定是否有从接收器中分离输出的方法。
谢谢!
combine
Sink运算符,使用提供的combine
函数将两个或多个Sink合并,可能是您要查找的内容:
Int => Graph[UniformFanOutShape[T, U], NotUsed]]
一个简单的例子:
def combine[T, U](first: Sink[U, _], second: Sink[U, _], rest: Sink[U, _]*)(strategy: Int => Graph[UniformFanOutShape[T, U], NotUsed]): Sink[T, NotUsed]