Bom dia, Ana.
Obrigado mais uma vez.
Tentei usar este exemplo, porém não parece estar funcionando.
A função é executada, porém os tokensLeft sempre é o mesmo independente da quantidade de requests que faço. Acredito que deveria ser subtraído sempre que uma nova request for feita.
Executei mais de 2 mil requisições com intervalo de 1ms e não teve essa limitação.
Código:
import { perMinuteRateLimiter } from "@vtex/api/lib/service/worker/runtime/http/middlewares/rateLimit";
import { createTokenBucket } from "@vtex/api/lib/service/worker/runtime/utils/tokenBucket";
const teste = async (_obj: any, args: any, ctx: Context, _info: any) => {
const { clients } = ctx;
const globalLimiter = createTokenBucket(2 * 1000);
console.log(
" ~ file: _teste.ts:8 ~ teste~ globalLimiter:",
globalLimiter
);
ctx.set("Cache-Control", "no-cache, no-store");
const request = await clients.teste.teste(args.email);
perMinuteRateLimiter(2 * 400, globalLimiter);
return request;
};
export { teste};
Retorno a cada request:
09:35:09.852 - info: ![🚀](https://fonts.gstatic.com/s/e/notoemoji/15.0/1f680/32.png) ~ file: _teste.ts:8 ~ teste ~ globalLimiter: TokenBucket {
loadSaved: [Function],
save: [Function],
removeTokensSync: [Function],
removeTokens: [Function],
size: 1000,
tokensToAddPerInterval: 2000,
interval: 60000,
tokensLeft: 1000,
lastFill: 1677674110378,
spread: true,
parentBucket: undefined,
maxWait: undefined
} service-node@6.36.3
09:35:10.097 - info: [12:35:10.626Z] [95] ***/routesapi:__graphql 200 POST /**/routesapi/_v/graphql 268 ms service-node@6.36.3
09:35:11.743 - info: ![🚀](https://fonts.gstatic.com/s/e/notoemoji/15.0/1f680/32.png) ~ file: _teste.ts:8 ~ teste ~ globalLimiter: TokenBucket {
loadSaved: [Function],
save: [Function],
removeTokensSync: [Function],
removeTokens: [Function],
size: 1000,
tokensToAddPerInterval: 2000,
interval: 60000,
tokensLeft: 1000,
lastFill: 1677674112270,
spread: true,
parentBucket: undefined,
maxWait: undefined
} service-node@6.36.3
09:35:11.802 - info: [12:35:12.329Z] [95] ***/routesapi:__graphql 200 POST /**/routesapi/_v/graphql 60 ms service-node@6.36.3
09:35:13.465 - info: ![🚀](https://fonts.gstatic.com/s/e/notoemoji/15.0/1f680/32.png) ~ file: _teste.ts:8 ~ teste ~ globalLimiter: TokenBucket {
loadSaved: [Function],
save: [Function],
removeTokensSync: [Function],
removeTokens: [Function],
size: 1000,
tokensToAddPerInterval: 2000,
interval: 60000,
tokensLeft: 1000,
lastFill: 1677674113975,
spread: true,
parentBucket: undefined,
maxWait: undefined
} service-node@6.36.3
Estou tentando ver isso via tickets, porém se tiver alguma ideia ou sugestão, agradeço.
Obrigado!!