GoCron: un forfait de planification de l'emploi Golang

GoCron est un package de planification de travaux qui vous permet d'exécuter des fonctions Go à des intervalles prédéterminés.
Si vous souhaitez discuter, vous pouvez nous trouver sur Slack à
Démarrage rapide
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
}
}Exemples
- Go Doc Exemples
- Annuaire d'exemples
Concepts
- Emploi : Le travail résume une "tâche", qui est composée d'une fonction GO et de tout paramètre de fonction. Le travail fournit ensuite au planificateur l'heure de la programmation du travail.
- Planificateur : Le planificateur garde une trace de tous les travaux et envoie chaque travail à l'exécuteur testamentaire lorsqu'il est prêt à être exécuté.
- Exécuteur : l'exécuteur exécuteur appelle la tâche de l'emploi et gère les complexités des différentes exigences de synchronisation de l'exécution de l'emploi (par exemple, les singletons qui ne devraient pas se dépasser, limitant le nombre maximum d'emplois en cours d'exécution)
Caractéristiques
Types d'emploi
Les travaux peuvent être exécutés à différents intervalles.
- Durée : les travaux peuvent être exécutés à un
time.Duration fixe. - Durée aléatoire : les travaux peuvent être exécutés à un
time.Duration aléatoire. Durée entre un min et max. - CRON : Les travaux peuvent être exécutés à l'aide d'un crontab.
- Tous les jours : les emplois peuvent être exécutés tous les x jours à des moments précis.
- Weekly : les travaux peuvent être exécutés toutes les x semaines tous les jours de la semaine et à des moments précis.
- Mensuellement : les travaux peuvent être exécutés tous les x mois tous les jours du mois et à des moments précis.
- Une fois : les travaux peuvent être exécutés à des heures spécifiques (une fois ou plusieurs fois).
Limites de concurrence
Les travaux peuvent être limités individuellement ou sur l'ensemble du planificateur.
- Par emploi Limiting avec le mode Singleton : les travaux peuvent être limités à une seule exécution simultanée qui reprograisse (saute des exécutions qui se chevauchent) ou des files d'attente (attendent que l'exécution précédente se termine).
- Per planificateur limitant le mode limite : les travaux peuvent être limités à un certain nombre d'exécutions simultanées sur l'ensemble du planificateur en utilisant soit REPALDULE (sauter lorsque la limite est remplie) ou la file d'attente (des travaux sont ajoutés à une file d'attente pour attendre que la limite soit disponible).
- Remarque: une limite de planificateur et une limite de travail peuvent tous deux être activées.
Instances distribuées de GoCron
Plusieurs instances de GoCron peuvent être exécutées.
- ÉLECTEUR : Un électeur peut être utilisé pour élire une seule instance de GoCron pour s'exécuter comme le principal avec les autres cas vérifiant si un nouveau leader doit être élu.
- Implémentations: électeurs Go-Co-OP (ne voyez pas ce dont vous avez besoin? Demande sur Slack pour obtenir un référentiel créé pour le contribuer!)
- Casier : un casier peut être utilisé pour verrouiller chaque exécution d'un travail sur une seule instance de GoCron. Locker peut être au travail ou au planificateur, s'il est défini à la fois au travail et au planificateur, le casier de travail préviendra.
- Implémentations: casiers Go-Co-OP (ne voyez pas ce dont vous avez besoin? Demande sur Slack pour obtenir un référentiel créé pour le contribuer!)
Événements
Les événements de travail peuvent déclencher des actions.
- Écouteurs : Peut être ajouté à un emploi, avec des auditeurs d'événements ou tous les travaux du planificateur pour écouter des événements d'emploi et déclencher des actions.
Options
De nombreuses options d'emploi et de planificateur sont disponibles.
- Options de travail : les options de travail peuvent être définies lors de la création d'un emploi à l'aide
NewJob . - Options de travail globales : les options de travail globales peuvent être définies lors de la création d'un planificateur à l'aide
NewScheduler et de l'option WithGlobalJobOptions . - Options du planificateur : les options de planificateur peuvent être définies lors de la création d'un planificateur à l'aide
NewScheduler .
Enregistrement
Les journaux peuvent être activés.
- Logueur: l'interface logique peut être implémentée avec la bibliothèque de journalisation souhaitée. Le NewLogger fourni utilise le package de journal de la bibliothèque standard.
Métrique
Des mesures peuvent être collectées à partir de l'exécution de chaque travail.
- Moniteur :
- MonitorStatus (inclut l'état et l'erreur (le cas échéant) du travail) Un moniteur peut être utilisé pour collecter des mesures pour chaque emploi auprès d'un planificateur.
- Implémentations: GO-CO-OP Moniteurs (ne voyez pas ce dont vous avez besoin? Demande sur Slack pour obtenir un référentiel créé pour le contribuer!)
Essai
La bibliothèque GoCron est configurée pour activer les tests.
- Des simulations sont fournies dans le package Mock à l'aide de Gomock.
- Le temps peut être moqué en passant dans un fakeclock à withclock - voir l'exemple sur withclock.
Supporters
Nous apprécions la prise en charge des logiciels gratuits et open source!
Ce projet est soutenu par:
Brains de jet
Sentinelle
Histoire des étoiles