Rocketseat / adonis-bull

The easiest way to start using an asynchronous job queue with AdonisJS. Ready for Adonis v5 ⚡️
MIT License
308 stars 57 forks source link

config/bull.js rate limiter not working #33

Closed JonhnyDev closed 4 years ago

JonhnyDev commented 4 years ago

Olá pessoal da rocket e demais devs =)

to fazendo minhas filas e fui testar a configuração do bull.js definindo um "max" e "duration" dentro de "limiter" para testar o envio de emails com regras do limitador até por que como todos sabem o AWS SES tem regras de limite de envio mas mesmo configurando como pede a doc não funcionou o bull processou todos juntos sem delay! segue outras informações:

config/bull.js:

"use strict";

const Env = use("Env");

module.exports = { // redis connection connection: Env.get("BULL_CONNECTION", "local"), bull: { limiter:{ max: 1, duration: 1000000000 }, redis: { host: "0.0.0.0", port: 6379, password: null, db: 0, keyPrefix: "" } }, remote: "redis://localhost:6379" };

User_Controller.js: Register user:

                Bull.add('USER_WELCOME', UserInfos)
                Bull.add('USER_WELCOME', UserInfos)
                Bull.add('USER_WELCOME', UserInfos)
                Bull.add('USER_WELCOME', UserInfos)

todos os emails chegam juntos: image

Gostaria que alguém me informa-se se eu to fazendo algo de errado ou se é um erro mesmo?

Outra duvida que não vi na documentação#Offtopic: Como faço pra verificar se o job foi processado com sucesso? no final da documentação tem como capturar os erros dos jobs mais não tem sobre o sucesso de jobs que estão na fila aguardando ser processados...

HigoRibeiro commented 4 years ago

Fala @JonhnyDev em tese apenas essa configuração seria o suficiente para você trabalhar com o limiter, vou tentar replicar o seu teste aqui para ver se algo diferente precisa ser acrescentado.

Sobre a questão do sucesso, você poder acrescentar um método no seu Job com o seguinte nome onCompleted que recebe dois parâmetros sendo o primeiro uma referência ao job e o segundo o resultado do job.

class Job {
  onCompleted(job, result) {
    // faça alguma coisa.
  }
}

No geral qualquer evento descrito aqui você pode criar um método no seu job para ele https://github.com/OptimalBits/bull/blob/master/REFERENCE.md#events

JonhnyDev commented 4 years ago

Fala @HigoRibeiro Muto obrigado pelo retorno. Vou aplicar a questão do sucesso e fico no aguardo dos testes sobre o limiter muito obrigado por sua atenção.

HigoRibeiro commented 4 years ago

@JonhnyDev acho que entendi seu problema!! Toda alteração que existir no Job pode não está sendo refletida na execução, dai você precisa reiniciar o serviço. Eu coloquei uma alteração para o limiter ser de 5 segundos, salvei e não mudou nada, depois reiniciei o serviço que executa meus jobs e passou a funcionar: Captura de Tela 2020-07-28 às 10 07 57

Experimenta fazer isso para ver se dá certo!

JonhnyDev commented 4 years ago

funcionou , obrigadooo