我对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错误代码时,从该队列向其下游暂停发射元素。但是,我看不到从外部控制队列中元素的发射的任何方法。
请告诉我是否有解决方法,或者可以使用的替代方法。预先谢谢你。