阿卡流 - 它可以像普通演员或其他方式一样缩放吗?



我有一个使用 Akka 流执行管道的代码。

我的问题是扩展它的最佳方法是什么?也可以使用 Akka 流来完成吗?

还是需要转换为演员/其他方式?

代码片段为:

val future = SqsSource(sqsEndpoint)(awsSqsClient)
.takeWhile(_=>true)
.map { m: Message =>
(m, Ack())
}.runWith(SqsAckSink(sqsEndpoint)(awsSqsClient))

如果您稍微修改代码,那么您的流将被具体化为多个Actor值。 这些具体化的Actor将为您提供所需的并发性:

val future = 
SqsSource(sqsEnpoint)(awsSqsClient)           //Actor 1
.via(Flow[Message] map (m => (m, Ack())))   //Actor 2
.to(SqsAckSink(sqsEndpoint)(awsSqsClient))  //Actor 3
.run()

请注意viato的使用。 这些很重要,因为它们表明流的这些阶段应具体化为单独的Actor。 在您的示例代码中,您在Source上使用maprunWith,这将导致由于运算符融合而仅创建 1 个 Actor。

询问外部参与者的流

如果您希望扩展到更多Actor,则可以使用Flow#mapAsync查询外部Actor以执行更多工作,类似于此示例。

相关内容

最新更新