Akka从外部控制Source.queue中元素的发射

时间:2019-10-14 01:24:13

标签: akka akka-stream akka-http

我对Akka还是比较陌生,并尝试处理有关Akka HTTP的特定情况。

我目前有一个Source.queue实现,如下:

poolClientFlow = Http.get(context().system())
            .cachedHostConnectionPoolHttps(ConnectHttp.toHostHttps(host), settings, context().system().log());
queue = Source.<Pair<HttpRequest, RequestMeta>>queue(maxOpenRequests, OverflowStrategy.dropNew())
                .throttle(maxRequestsPerSecond, Duration.ofSeconds(1))
                .via(poolClientFlow)
                .to(Sink.foreach(this::handleResponse))
                .run(materializer);

我正在连接实现速率限制的第三方API。如果我拨打的电话超出其速率限制,他们会以429 http错误代码(请求过多)以及等待时间响应,在此之后可以安全地执行下一个请求。如果我忽略此等待时间,则第三方API将以指数方式增加我需要避免的等待时间,从而对我造成惩罚。

我想做的是,每当具体化的HTTPResponse具有429 http错误代码时,从该队列向其下游暂停发射元素。但是,我看不到从外部控制队列中元素的发射的任何方法。

请告诉我是否有解决方法,或者可以使用的替代方法。预先谢谢你。

0 个答案:

没有答案