首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在处理速率限制的同时异步发送HTTP请求?

如何在处理速率限制的同时异步发送HTTP请求?
EN

Stack Overflow用户
提问于 2020-08-04 20:07:02
回答 1查看 174关注 0票数 3

免责声明:我是sttp莫尼克斯的新手,这是我想了解更多关于这些库的尝试。我的目标是通过HTTP请求、->解析JSON响应->从给定的API获取数据(客户端),将这些信息写入数据库。我的问题只涉及第一部分。我的目标是以异步(希望是快速)的方式运行get请求,同时具有避免或处理速率限制的方法。

下面是我已经尝试过的内容片段,似乎只适用于一个请求:

代码语言:javascript
复制
package com.github.client

import io.circe.{Decoder, HCursor}
import sttp.client._
import sttp.client.circe._
import sttp.client.asynchttpclient.monix._
import monix.eval.Task

object SO extends App {

  case class Bla(paging: Int)

  implicit val dataDecoder: Decoder[Bla] = (hCursor: HCursor) => {
    for {
      next_page <- hCursor.downField("foo").downArray.downField("bar").as[Int]
    } yield Bla(next_page)
  }

  val postTask = AsyncHttpClientMonixBackend().flatMap { implicit backend =>
    val r = basicRequest
      .get(uri"https://foo.bar.io/v1/baz")
      .header("accept", "application/json")
      .header("Authorization", "hushh!")
      .response(asJson[Bla])

    r.send() // How can I instead of operating on a single request, operate on multiple
      .flatMap { response =>
        Task(response.body)
      }
      .guarantee(backend.close())
  } 

  import monix.execution.Scheduler.Implicits.global

  postTask.runSyncUnsafe() match {
    case Left(error) => println(s"Error when executing request: $error")
    case Right(data) => println(data)
  }
}

我的问题:

  1. 如何通过使用Monix对多个GET请求(而不是单个请求)进行操作,同时保持代码异步和可组合
  2. 如何避免或处理api服务器施加的命中率限制?

另外,我在使用另一个后端方面也很灵活,如果这将支持限制利率的目标的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 21:26:35

您可以像这样使用monix.reactive.Observable

代码语言:javascript
复制
  Observable.repeatEval(postTask) // we generate infinite observable of the task
    .throttle(1.second, 3) // set throttling
    .mapParallelOrderedF(2)(_.runToFuture) // set execution parallelism and execute tasks
    .subscribe() // start the pipline
  
  
  while (true) {}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63254339

复制
相关文章

相似问题

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