我试图在下面的例子中理解更好的Akka Streams概念。考虑一个银行账户。它有一个过去的交易历史记录,将会有新的交易。现在我们想将它用作Akka流的源。但其数据将用于3种不同的场景:
我们在Akka流方面有什么?流源中的差异是否会以不同的数据提供相同的流量和汇点?或者来源是相同的(它是来自同一银行账户的所有交易)但我们需要应用不同的过滤操作来获得不同的结果?
答案 0 :(得分:2)
Akka流源可以像scala中存在的任何其他Iterable
一样进行组合。
根据您的示例,假设我们有持久存储在数据库中的历史事务。我们可以使用slick streaming之类的东西来从db获取这些事务:
val historicSource : Source[Transaction, _] = ???
还会有实时交易(可能来自消息系统):
val realtimeSource : Source[Transaction, _] = ???
这两个来源可以合并:
val combinedSource = historicSource ++ realtimeSource
然后,这些组合事件可以由相同的流处理逻辑使用;例如,你可以println
任何超过$ 1,000.00的交易:
val isLargeTransaction = (_ : Transaction).dollarAmount > 1000.0
val reportTransaction = (transaction : Transaction) =>
println s"Large Transaction: $transaction"
combinedSource.filter(isLargeTransaction)
.runWith(Sink foreach reportTransaction)