Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 改变阿克卡河的未来_Scala_Akka_Akka Stream - Fatal编程技术网

Scala 改变阿克卡河的未来

Scala 改变阿克卡河的未来,scala,akka,akka-stream,Scala,Akka,Akka Stream,我尝试使用Akka Streams并发地向服务器发送请求,然后尝试将每个请求与原始上下文关联,在本例中为Int。这是我整理的流程: val createRequestFlow: Flow[(String, String), (HttpRequest, Int), _] = Flow.fromFunction[(String, String), (HttpRequest, Int)]((mkRequest _).tupled) val sendRequestFlow: Flow[(HttpRequ

我尝试使用Akka Streams并发地向服务器发送请求,然后尝试将每个请求与原始上下文关联,在本例中为Int。这是我整理的流程:

val createRequestFlow: Flow[(String, String), (HttpRequest, Int), _] = Flow.fromFunction[(String, String), (HttpRequest, Int)]((mkRequest _).tupled)
val sendRequestFlow: Flow[(HttpRequest, Int), (HttpResponse, Int), _] = Flow[(HttpRequest, Int)].mapAsyncUnordered(32)((sendRequest _).tupled)
val handleResponseFlow: Flow[(HttpResponse, Int), String, _] = Flow[(HttpResponse, Int)].map[String]((getStatusString _).tupled)

val handler =  createRequestFlow via sendRequestFlow via handleResponseFlow
特别是,我试图找到返回未来[HttpResponse,Int]的方法。目前,我正在这样做

def sendRequest(request: HttpRequest, ctx: Int): Future[(HttpResponse, Int)] = {
    Http().singleRequest(request).map(r => (r,ctx))
  }

但我明白,这需要一个执行人,这表明还有其他更好的方法来做。

我认为没有更好的方法。Akka使用标准的Scala,它们在设计上需要ExecutionContext来执行几乎任何操作。如果您真的不想为这个简单的映射使用另一个线程,您可以创建自己的SametReadExecutionContext,类似于Akka在see中使用的线程,这样映射将在处理主Http响应的同一个线程上执行,但不要将其用于任何更复杂的事情,请参见中的讨论。

您走的路是正确的,只需让sendRequest接受隐式ExecutionContext。