@cedvict/http-guardian-plugin-rate-limit 页面存档备份,存于互联网档案馆
用于 http-guardian 的费率限制插件 — 结合每个主机 货币
司马发 和可选 符号桶 (平方公里)。 上游荣誉
Retry-After 429号公路.
使用量
import { rateLimitPlugin } from "@cedvict/http-guardian-plugin-rate-limit";
import { createHttpClient, createApiParserStructured, bearerAuth } from "@cedvict/http-guardian";
const api = createHttpClient({
baseUrl: "https://api.example.com",
auth: bearerAuth(() => token),
parser: createApiParserStructured(),
plugins: [
rateLimitPlugin({
maxConcurrent: 6, // 6 in-flight per host max
tokensPerInterval: 30, // 30 req per interval
intervalMs: 1000, // refill window
honorRetryAfter: true, // pause bucket on 429 Retry-After
}),
],
});
冲出429到UI.. onRateLimited
设定 onRateLimited 每次上游返回429时通知。 这个
事件带有解析 Retry-After (ms),生头和宿主
键,可以显示精确的祝酒词(“Trop de requêtes, réessayez dans Ns”)或
记录一个度量,而不在每个呼叫站点重新显示:
import { rateLimitPlugin } from "@cedvict/http-guardian-plugin-rate-limit";
rateLimitPlugin({
maxConcurrent: 6,
tokensPerInterval: 30,
intervalMs: 1000,
onRateLimited: ({ url, status, retryAfterMs, headers, key, method }) => {
const seconds = retryAfterMs ? Math.ceil(retryAfterMs / 1000) : null;
toast.warn(
seconds
? `Trop de requêtes (${key}). Réessayez dans ${seconds}s.`
: `Trop de requêtes (${key}). Réessayez plus tard.`,
);
metrics.increment("http.rate_limited", { method, host: key });
},
});
不计其数的回叫火 honorRetryAfter - 那面旗帜只有控制
是否为 桶头 暂停; 调用为信息 。 出错
从召回 被抓住和忽略 所以一个buggy钩永远不会打破
请求管道.