我在Spray中实现了一个REST端点。
以下是流程以及负责以下每个步骤的角色的名称。
Future
Future
。到可以处理数据的actor(ProcessingActor)最昂贵的步骤是#4(可能需要400毫秒到5分钟,具体取决于输入数据集的大小。
我的问题是如何从#5返回HTTP响应?
答案 0 :(得分:1)
有多种方法可以处理您可以使用的方法,这些方法适合您的架构。使用任何方法,您将必须使用ctx(spray' RequestContext)完整方法来完成HTTP请求。您可以使用: -
message
从ActorStep1传递到ActorStep2,那么您需要传递message(ctx)
在这种方法中。此方法的好处是您可以从任何步骤完成请求,但会为每条消息添加额外的属性。 telling
模式代替ask
。在步骤5中,您将使用Future[ HTTP Response]
在步骤4中回复Actor。类似地,步骤4中的Actor将在步骤3中响应Actor,依此类推。这对我有用,因为我只有一条链,可能不适合你。 forward
模式。例如 - 步骤1中的Actor将在步骤2中将消息传递给Actor。步骤2中的Actor将forward
在处理之后将消息发送到步骤3中的Actor,依此类推,直到步骤5中的Actor。 5将使用sender ! Future[HTTPResponse]
回复,{{1}}实际上会在步骤1中将消息发送给Actor,您可以在其中完成请求。 Spray只是Akka上面的一个薄层,将此视为从子actor传递消息回到父Actor的情况。