Gocron: un paquete de programación de trabajo de Golang

Gocron es un paquete de programación de trabajo que le permite ejecutar funciones GO a intervalos predeterminados.
Si quieres chatear, puedes encontrarnos en Slack a
Comienzo 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
}
}Ejemplos
- GO EJEMPLOS DOC
- Directorio de ejemplos
Conceptos
- Trabajo : El trabajo encapsula una "tarea", que se compone de una función GO y cualquier parámetros de función. Luego, el trabajo proporciona al programador la hora en que el trabajo debe programarse para ejecutarse.
- Scheduler : el planificador realiza un seguimiento de todos los trabajos y envía cada trabajo al ejecutor cuando está listo para ejecutarse.
- Ejecutor : el albacea llama a la tarea del trabajo y administra las complejidades de diferentes requisitos de tiempo de ejecución del trabajo (por ejemplo, singletons que no deberían sobrecargarse, limitando el número máximo de trabajos en ejecución)
Características
Tipos de trabajo
Los trabajos se pueden ejecutar a varios intervalos.
- Duración : los trabajos se pueden ejecutar en un
time.Duration fijo. Duración. - Duración aleatoria : los trabajos se pueden ejecutar en un
time.Duration aleatorio. Duración entre un min y máx. - CRON : Los trabajos se pueden ejecutar usando un crontab.
- Diario : los trabajos se pueden ejecutar cada x días en momentos específicos.
- Weekly : los trabajos se pueden ejecutar cada x semanas en días específicos de la semana y en momentos específicos.
- Monthly : los trabajos se pueden ejecutar cada x meses en días específicos del mes y en momentos específicos.
- Una vez : los trabajos se pueden ejecutar en un momento (s) específico (s) (ya sea una o muchas veces).
Límites de concurrencia
Los trabajos pueden limitarse individualmente o en todo el planificador.
- Por trabajo que limita con el modo Singleton : los trabajos pueden limitarse a una sola ejecución concurrente que reprograman (omita ejecuciones superpuestas) o colas (espera la ejecución anterior).
- Por programador, limita con el modo límite : los trabajos se pueden limitar a un cierto número de ejecuciones concurrentes en todo el programador utilizando reprogramar (omita cuando se cumpla el límite) o la cola (los trabajos se agregan a una cola para esperar a que el límite esté disponible).
- Nota: Un límite de programador y un límite de trabajo se pueden habilitar.
Instancias distribuidas de Gocron
Se pueden ejecutar múltiples instancias de Gocron.
- Elector : un elector se puede usar para elegir una sola instancia de Gocron para ejecutarse como primaria con las otras instancias verificando si un nuevo líder necesita ser elegido.
- Implementaciones: Go-Co-Op Electores (¡no ves lo que necesitas? ¡Solicite en Slack para que se creen un repositorio para contribuirlo!)
- Locker : se puede usar un casillero para bloquear cada ejecución de un trabajo en una sola instancia de Gocron. El casillero puede estar en el trabajo o el programador, si se define tanto en el trabajo como en el planificador, entonces el casillero del trabajo tendrá prioridad.
- Implementaciones: GO-Co-OP Lockers (¿no ve lo que necesita? ¡Solicite en Slack para obtener un repositorio creado para contribuirlo!)
Eventos
Los eventos laborales pueden desencadenar acciones.
- Oyentes : se puede agregar a un trabajo, con oyentes de eventos o todos los trabajos en todo el planificador para escuchar eventos de trabajo y activar acciones.
Opción
Hay muchas opciones de trabajo y programador disponibles.
- Opciones de trabajo : las opciones de trabajo se pueden configurar al crear un trabajo usando
NewJob . - Opciones de trabajo globales : las opciones de trabajo globales se pueden establecer al crear un programador que usa
NewScheduler y la opción WithGlobalJobOptions . - Opciones de programador : las opciones de programador se pueden configurar al crear un planificador usando
NewScheduler .
Explotación florestal
Los registros se pueden habilitar.
- Logger: la interfaz de registrador se puede implementar con su biblioteca de registro deseada. El NewLogger proporcionado utiliza el paquete de registro de la biblioteca estándar.
Métrica
Las métricas se pueden recopilar de la ejecución de cada trabajo.
- Monitor :
- MonitorStatus (incluye estado y error (si lo hay) del trabajo) Se puede usar un monitor para recopilar métricas para cada trabajo de un programador.
- Implementaciones: GO-Co-op Monitors (¡no ves lo que necesitas? ¡Solicite en Slack para obtener un repositorio creado para contribuirlo!)
Pruebas
La biblioteca Gocron está configurada para habilitar las pruebas.
- Se proporcionan simulacros en el paquete simulado usando Gomock.
- El tiempo se puede burlarse pasando en un Fakeclock a WithClock; vea el ejemplo en WithClock.
Seguidores
¡Apreciamos el soporte de software gratuito y de código abierto!
Este proyecto está respaldado por:
Rejilla
Centinela
Historia de la estrella