Ticketing Go Library
GitHub pkg.go.devRepositori
Contoh
Contoh Dasar
Buat satu broker saat aplikasi mulai dan gunakan bersama. wait=0 adalah satu percobaan langsung tanpa queue, maksimum 255 detik; lease 1–250 detik. Minimum-work budget terakhir wajib dan boleh nol. Pecahan detik dibulatkan ke atas; nilai di luar rentang atau budget di atas lease ternormalisasi ditolak sebelum kirim, tidak pernah di-clamp.
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.Close/drop otomatis adalah bounded best-effort release. Gunakan explicit release API bila hasil penting. Token wajib melakukan fencing pada DB write terlindungi di transaction yang sama.
Perilaku yang Perlu Diketahui
- Jika satu request byte mungkin terkirim, hilangnya respons final menghasilkan Indeterminate.
Atidak otomatis dikirim ulang dengan owner yang sama; caller tidak masuk critical section. - Cancel sebelum send adalah unsent; setelah possible-send menutup session. Jika grant token diparse bersamaan, dilakukan bounded compensating exact-token release.
M, semuaE, dan response malformed/oversized/unknown adalah session-fatal. Acquire possible-send yang belum pasti menjadi Indeterminate.Badalah capacity rejection pasti dan langsung dikembalikan. Tanpa retry internal; caller dapat memulai acquire baru dengan owner baru setelah application backoff.- Explicit/compensating release mencoba exact token hanya selama 5 detik absolut sejak call/enqueue.
Rsukses,Nsudah hilang/bukan current; tanpa respons final adalah error, bukan diasumsikan sukses. - Ticket hanya diberikan dengan sisa waktu konservatif positif yang cukup untuk work budget. Work di atas 250 detik unsupported sebelum kirim.
- DB fencing dengan token wajib: dalam transaction yang sama tolak
token <= stored_high_water, perbarui high-water dan lakukan business write sebelum commit/rollback dan release.
Opsi Keamanan (Token · TLS)
Semua opsi bersifat opsional. Token harus sesuai dengan client_tokens milik server, dan TLS punya empat mode: mati / trust store sistem / CA yang ditentukan / lewati verifikasi (khusus test).
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()
})Konfigurasi token, TLS, dan cluster di sisi server bisa Anda buat di halaman Deployment Server Ticketing.