Gocron: um pacote de agendamento de emprego de Golang

O Gocron é um pacote de agendamento de empregos que permite executar funções Go Go em intervalos pré-determinados.
Se você quiser conversar, pode nos encontrar no Slack em
Início rápido
go get github.com/go-co-op/gocron/v2
package main
import (
"fmt"
"time"
"github.com/go-co-op/gocron/v2"
)
func main () {
// create a scheduler
s , err := gocron . NewScheduler ()
if err != nil {
// handle error
}
// add a job to the scheduler
j , err := s . NewJob (
gocron . DurationJob (
10 * time . Second ,
),
gocron . NewTask (
func ( a string , b int ) {
// do things
},
"hello" ,
1 ,
),
)
if err != nil {
// handle error
}
// each job has a unique id
fmt . Println ( j . ID ())
// start the scheduler
s . Start ()
// block until you are ready to shut down
select {
case <- time . After ( time . Minute ):
}
// when you're done, shut it down
err = s . Shutdown ()
if err != nil {
// handle error
}
}Exemplos
- Vá exemplos de documentos
- Exemplos Diretório
Conceitos
- Trabalho : o trabalho encapsula uma "tarefa", que é composta por uma função GO e qualquer parâmetros de função. O trabalho fornece ao agendador o horário em que o trabalho deve ser programado para ser executado.
- Agendador : O agendador acompanha todos os trabalhos e envia cada trabalho para o executor quando estiver pronto para ser executado.
- Executor : o executor chama a tarefa do trabalho e gerencia as complexidades de diferentes requisitos de tempo de execução de emprego (por exemplo, singletons que não devem se invadir, limitando o número máximo de trabalhos em execução)
Características
Tipos de trabalho
Os empregos podem ser executados em vários intervalos.
- Duração : os trabalhos podem ser executados em um
time.Duration fixo. - Duração aleatória : os trabalhos podem ser executados em um
time.Duration aleatório. Duração entre um min e o máximo. - CRON : Os trabalhos podem ser executados usando um Crontab.
- Diariamente : os trabalhos podem ser executados a cada x dias em horários específicos.
- Semanal : os empregos podem ser executados a cada x semanas em dias específicos da semana e em horários específicos.
- Mensal : os trabalhos podem ser executados a cada x meses em dias específicos do mês e em horários específicos.
- Uma vez : os trabalhos podem ser executados em horários específicos (uma ou muitas vezes).
Limites de simultaneidade
Os trabalhos podem ser limitados individualmente ou em todo o agendador.
- Por um trabalho limitando com o modo singleton : os trabalhos podem ser limitados a uma única execução simultânea que reagendas (pula as execuções sobrepostas) ou filas (aguarda a execução anterior terminar).
- De acordo com o agendador limitando com o modo limite : os trabalhos podem ser limitados a um certo número de execuções simultâneas em todo o agendador usando o rechedule (ignorar quando o limite for atendido) ou na fila (os trabalhos são adicionados a uma fila para aguardar o limite disponível).
- Nota: Um limite de agendador e um limite de trabalho podem ser ativados.
Instâncias distribuídas de gocron
Várias instâncias de gocron podem ser executadas.
- Eleitor : Um eleitor pode ser usado para eleger uma única instância de Gocron para ser executada como primária, com as outras instâncias verificando para ver se um novo líder precisa ser eleito.
- Implementações: elegores Go-Co-Op (não veja o que você precisa? Solicitação no Slack para criar um repositório para contribuir!)
- Locker : Um armário pode ser usado para bloquear cada execução de um trabalho em uma única instância de gocron. O Locker pode estar no Job ou Scheduler, se estiver definido no Job e no Scheduler, o Locker of Job terá precedência.
- Implementações: GO-CO--OP Lockers (não veja o que você precisa? Solicitação no Slack para criar um repositório para contribuir!)
Eventos
Eventos de trabalho podem desencadear ações.
- Os ouvintes : podem ser adicionados a um emprego, com ouvintes de eventos ou todos os trabalhos em todo o agendador para ouvir eventos de emprego e acionar ações.
Opções
Muitas opções de emprego e agendador estão disponíveis.
- Opções de trabalho : as opções de trabalho podem ser definidas ao criar um trabalho usando
NewJob . - Opções globais de trabalho : as opções globais de trabalho podem ser definidas ao criar um agendador usando
NewScheduler e a opção WithGlobalJobOptions . - Opções do agendador : as opções do agendador podem ser definidas ao criar um agendador usando
NewScheduler .
Log
Os logs podem ser ativados.
- Logger: A interface do Logger pode ser implementada com a biblioteca de registro desejada. O NewLogger fornecido usa o pacote de log da biblioteca padrão.
Métricas
As métricas podem ser coletadas da execução de cada trabalho.
- Monitor :
- MonitorStatus (inclui status e erro (se houver) do trabalho) Um monitor pode ser usado para coletar métricas para cada trabalho de um agendador.
- Implementações: Monitores Go-Co-Op (não veja o que você precisa? Solicitação no Slack para criar um repositório para contribuir!)
Teste
A biblioteca Gocron está configurada para ativar o teste.
- As zombares são fornecidas no pacote simulado usando Gomock.
- O tempo pode ser ridicularizado ao passar em um fakeclock para Withclock - veja o exemplo no Withclock.
Apoiadores
Agradecemos o suporte para software gratuito e de código aberto!
Este projeto é suportado por:
Jetbrains
Sentinela
História da estrela