考虑包含所有HTTP服务的路由
val routes:Route = ...
我希望限制请求数,因此我使用Route.handleFlow(routes)
创建流,并在有限的持续时间内调用了节流方法。
最后,我使用创建了HTTP绑定
Http().bindAndHandle(flowObjectAfterThrottling, hostname, port)
akka
不会从循环中触发HTTP请求。
答案 0 :(得分:1)
一种可能性是被“从循环中触发”的http请求可能正在使用单独的连接。每个进入的连接都以适当的速率进行节流,但是总吞吐量却高于预期。
改为使用配置
您无需编写软件即可为Route
设置限制费率。
如果仅关注磁盘或RAM等资源的消耗,则可以删除费率逻辑并改用akka configuration settings:
# The maximum number of concurrently accepted connections when using the
# `Http().bindAndHandle` methods.
max-connections = 1024
# The maximum number of requests that are accepted (and dispatched to
# the application) on one single connection before the first request
# has to be completed.
pipelining-limit = 16
这不提供设置最大频率的功能,但是它至少允许指定最大并发使用量,这通常足以保护资源。