当前位置: 首页 > 知识库问答 >
问题:

在scala-stream流中组合akka-http流的最佳方法是什么

昌砚
2023-03-14
val stream1:Flow[T,String,NotUsed] = Flow[T].map(_.toString)
val stream2: Flow[String,Future[HttpRespone],NotUsed] = Flow[String].map(param => Http.singleRequest(HttpRequest(uri=s"host.com/$param")))
val stream3 = stream1 via stream2

这是最好的方法吗?你们会推荐哪种方法?为什么?在这个用例的范围内有几个最好的实践示例将是很棒的!

提前致谢:)

共有1个答案

郭胤
2023-03-14

您的实现将为每个新参数创建一个到“host.com”的新连接。这是不必要的,并阻止akka进行某些优化。实际上,akka保留了一个连接池来重用开放的连接,但我认为最好在代码中指定您的意图,而不是依赖底层实现。

您可以按照文档中的描述建立单个连接:

val connectionFlow: Flow[HttpRequest, HttpResponse, _] = 
  Http().outgoingConnection("host.com")

要利用此连接流,您需要将字符串路径转换为httpRequest对象:

import akka.http.scaladsl.model.Uri
import akka.http.scaladsl.model.Uri.Path

def pathToRequest(path : String) = HttpRequest(uri=Uri.Empty.withPath(Path(path)))

val reqFlow = Flow[String] map pathToRequest
val stream3 = stream1 via reqFlow via connectionFlow
 类似资料:
  • 问题内容: 我需要在Scala / Akka代码中使用memcached Java API 。该API为您提供同步和异步方法。异步的返回java.util.concurrent.Future。这里有一个关于在Scala中处理JavaFutures的问题,如何在AkkaFuture中包装java.util.concurrent.Future?。但是,就我而言,我有两种选择: 使用同步API并在以后包

  • 假设我有多个要作为单个流处理的集合。最简单的方法是什么?是否有一个实用程序类可以为我做这件事,或者我必须自己滚动一些东西? 如果我的问题不清楚,这基本上就是我想做的:

  • 问题内容: 我通过定义如下的ENUM来验证从数据库中检索到的记录的状态 方法isSuccess()用于检查检索到的记录的状态(员工的列状态) 根据新的要求,引入了一组条件,例如A,B和C。对于他们,在Employee表“ condition”中有一列。 因此,我需要检索状态以及条件,并查看它是否属于具有两者组合的集合。 例如:isSuccess()应该检查以下内容: 必须做到这一点,以使我很容易在

  • 问题内容: 我想杀死整个进程树。使用任何常用脚本语言执行此操作的最佳方法是什么?我正在寻找一个简单的解决方案。 问题答案: 您没有说您要杀死的树是否是单个进程组。(如果树是从服务器启动或shell命令行派生的结果,通常是这种情况。)可以使用GNU ps如下发现进程组: 如果它是您要终止的进程组,则只需使用命令,而不要给它一个进程号,而要给它取 反 组号。例如,要杀死组5112中的每个进程,请使用。

  • 问题内容: 我想不出任何可行的方法来在c中实现流水线工作。这就是为什么我决定在这里写的原因。我必须说,我了解管道/叉子/ mkfifo的工作方式。我已经看到了很多实施2-3条管道的示例。这简单。当我必须实现Shell时,我的问题就开始了,而管道数量是未知的。 我现在所拥有的:例如。 我将这样的行转换为类似的内容: 所以我可以用 稍后的。 现在,我相信一切都会好起来的。当我尝试将输入/输出的功能重定