Esta página explicará como configurar a prioridade do processamento em segundo plano com asynq
para atender às suas necessidades.
Prioridade Ponderada
Por padrão, Server
criará uma fila chamada "default" para processar todas as tarefas.
Se precisar atribuir prioridades a cada tarefa, pode criar várias filas com diferentes níveis de prioridade.
Exemplo:
srv := asynq.NewServer(redis, asynq.Config{
Concorrência: 10,
Filas: map[string]int{
"crítico": 6,
"default": 3,
"baixa": 1,
},
})
Isso criará uma instância de Background
com três filas: crítico, default e baixa. Os números associados aos nomes das filas representam o nível de prioridade das filas.
Com base na configuração acima:
- Tarefas na fila crítico serão processadas 60% do tempo
- Tarefas na fila default serão processadas 30% do tempo
- Tarefas na fila baixa serão processadas 10% do tempo
Agora que temos várias filas com diferentes níveis de prioridade, podemos especificar qual fila usar ao agendar tarefas.
Exemplo:
client := asynq.NewClient(redis)
tarefa := asynq.NewTask("enviar_notificação", map[string]interface{}{"id_do_usuário": 42})
// Use a opção `asynq.Fila` para especificar que a tarefa use a fila "crítico".
err := client.Enfileirar(tarefa, asynq.Fila("crítico"))
// Por padrão, as tarefas serão enfileiradas para a fila "default".
err = client.Enfileirar(tarefa)
Com o comando asynq stats
, podemos verificar as filas.
Você pode visualizar o número de tarefas em cada fila na seção "FILAS" da saída.
Prioridade Estrita
Se precisar criar várias filas e desejar que todas as tarefas em uma fila sejam processadas com prioridade mais alta, pode usar a opção StrictPriority
.
Exemplo:
srv := asynq.NewServer(redis, asynq.Config{
Concorrência: 10,
Filas: map[string]int{
"crítico": 3,
"default": 2,
"baixa": 1,
},
StrictPriority: true, // Modo estrito!
})
Isso criará uma instância de Background
com três filas e prioridade estrita: crítico, default e baixa. No modo de prioridade estrita, filas com prioridade mais alta sempre serão processadas primeiro, e filas de prioridade mais baixa só serão processadas se todas as outras filas de prioridade mais alta estiverem vazias.
Portanto, neste exemplo, as tarefas na fila crítico sempre serão processadas primeiro. Se a fila crítico estiver vazia, a fila default será processada. Se tanto as filas crítico quanto default estiverem vazias, a fila baixa será processada.