Actuellement en test : le code GitHub sera ouvert une fois terminé.

Bibliothèque Ticketing Go

GitHub pkg.go.dev

Dépôt

bash

Exemple

Exemple simple

Créez un broker au démarrage et partagez-le. wait=0 est une tentative immédiate sans file, au maximum 255 s ; lease vaut 1–250 s. Le minimum-work budget final est obligatoire et peut valoir zéro. Les fractions de seconde sont arrondies vers le haut et les valeurs hors plage ou un budget supérieur au bail normalisé sont rejetés avant envoi, jamais clampés.

go
import ticketing "github.com/saro-lab/ticketing/ticketing-go"

broker := ticketing.Connect("127.0.0.1:5225")
broker.WaitReady(ctx, 5*time.Second)

ticket, err := broker.Acquire(ctx, "key", 5*time.Second, 30*time.Second, 2*time.Second)
if err != nil {
    return err
}
defer ticket.Close()
token := ticket.Token
// In the same DB transaction: verify/update token high-water and perform the business write.

Le close/drop automatique est un release borné best-effort. Utilisez l'API de release explicite si le résultat compte. Le token doit protéger l'écriture DB dans la même transaction.

Bon à savoir (comportement)

  • Dès qu'un byte a pu être envoyé, la perte de la réponse définitive produit Indeterminate. Aucun renvoi automatique de A avec le même owner ; le caller n'entre pas en section critique.
  • Cancel avant envoi est unsent ; après possible-send il ferme la session. Si un grant token a été parsé en parallèle, un release compensatoire exact-token borné est tenté.
  • M, tous les E et les réponses malformed/oversized/unknown sont session-fatal. Un acquire possible-send non résolu devient Indeterminate.
  • B est un refus certain de capacity, rendu immédiatement. Aucun retry interne ; le caller peut démarrer un nouvel acquire avec nouvel owner et backoff applicatif.
  • Les releases explicites/compensatoires ne retentent l'exact token que pendant 5 secondes absolues depuis call/enqueue. R réussit, N signifie absent ou non courant ; sans réponse finale, erreur, jamais succès supposé.
  • Ticket n'est rendu qu'avec un temps conservateur positif suffisant pour le work budget. Un travail de plus de 250 s est unsupported avant envoi.
  • Le fencing DB par token est obligatoire : dans la même transaction, rejeter token <= stored_high_water, mettre à jour high-water et effectuer le business write avant commit/rollback puis release.

Options de sécurité (Token · TLS)

Toutes les options sont facultatives. Token doit correspondre au client_tokens du serveur, et TLS propose quatre modes : désactivé / magasin de confiance système / CA spécifiée / vérification ignorée (test uniquement).

go
broker, err := ticketing.New(ticketing.Options{
    Addrs: []string{"10.0.0.1:5225", "10.0.0.2:5225", "10.0.0.3:5225"},
    Token: "123",
    TLS:   ticketing.TLSSystemRoots(), // TLSOff() | TLSCa("ca.crt") | TLSInsecureSkipVerify()
})

Vous pouvez générer le jeton, le TLS et la configuration de cluster côté serveur sur la page Déploiement du serveur Ticketing.