首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时发出10个http请求?

如何同时发出10个http请求?
EN

Stack Overflow用户
提问于 2020-04-02 12:43:14
回答 1查看 138关注 0票数 1

我有10个请求

代码语言:javascript
复制
  val reqTemplate = quickRequest.post(uri"http://localhost:8280/delay/1")
  val requests = for {i <- 1 to 10} yield {
    reqTemplate.body(s"{test:$i}")
  }

如何同时发送这些请求?

我试过了

代码语言:javascript
复制
  val responseTasks = reqs.map(SttpClient.send)
  val allResponsesTask: Task[List[Response[String]]] = ZIO.collectAllPar(responseTasks)

  val appLogic: Task[Unit] = for {
    resps <- allResponsesTask
    resp <- resps
    _ <- putStrLn(resp.toString())
    _ <- putStrLn("Done")
  } yield ()

  Runtime.default.unsafeRunAsync(appLogic)

但这给我带来了各种有趣的编译错误。

代码语言:javascript
复制
Error:(18, 74) type mismatch;
 found   : scala.collection.immutable.IndexedSeq[zio.ZIO[sttp.client.asynchttpclient.zio.SttpClient,Throwable,sttp.client.Response[String]]]
    (which expands to)  scala.collection.immutable.IndexedSeq[zio.ZIO[zio.Has[sttp.client.SttpBackend[zio.Task,Nothing,sttp.client.asynchttpclient.WebSocketHandler]],Throwable,sttp.client.Response[String]]]
 required: Iterable[zio.ZIO[Any,Throwable,sttp.client.Response[String]]]
  val allResponsesTask: Task[List[Response[String]]] = ZIO.collectAllPar(responseTasks)
Error:(23, 7) type mismatch;
 found   : zio.ZIO[zio.console.Console,Nothing,Unit]
    (which expands to)  zio.ZIO[zio.Has[zio.console.Console.Service],Nothing,Unit]
 required: scala.collection.GenTraversableOnce[?]
    _ <- putStrLn(response.toString())
Error:(22, 14) type mismatch;
 found   : List[Nothing]
 required: zio.ZIO[Any,Throwable,Unit]
    response <- responses
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-05 13:23:39

问题是您已经声明了一个Sttp依赖项,但是您还没有提供它。

如果您对responsesTask进行了注释,您将看到它实际上是Seq[ZIO[SttpClient, Throwable, Response[String]]]类型,这意味着您需要提供一个客户端来满足依赖性。

我会将其更改为类似以下内容:

代码语言:javascript
复制
  val allResponsesTask: Task[List[Response[String]]] = 
    ZIO.collectAllPar(responseTasks)
      .provideLayer(AsyncHttpClientZioBackend.layer())

注意,为了简单起见,我在这里添加了层,但通常您希望在应用程序的边缘添加所有层,因为创建层并不是免费的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60984358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档