阿卡流 - 它可以像常规演员或其他方式一样扩展吗?

时间:2017-08-21 13:47:27

标签: scala akka-stream akka-cluster

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

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

或者需要将其转换为演员/其他方式?

代码段是:

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

1 个答案:

答案 0 :(得分:0)

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

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

请注意viato的使用。这些很重要,因为它们表明流的那些阶段应该被实现为单独的Actors。在您的示例代码中,您在map上使用了runWithSource,因为operator fusion只会导致创建一个Actor。

询问外部演员的流程

如果您希望扩展到更多Actors,那么您可以使用Flow#mapAsync查询外部Actor以执行更多工作,类似于this example