Library C/C++ Ticketing
GitHubBelum terdaftar di registry resmi vcpkg — persyaratan pengajuannya ketat dan pendaftaran masih berlangsung. Untuk saat ini, clone repositori Github di atas dan build sendiri.
Repositori
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.
#include <ticketing/ticketing.h>
const char *addrs[] = {"127.0.0.1:5225"};
ticketing_broker *broker = ticketing_connect(addrs, 1);
ticketing_wait_ready(broker, 5);
ticketing_ticket *ticket = NULL;
if (ticketing_acquire(broker, "key", 5.0, 30.0, 2.0, &ticket) == TICKETING_OK) {
uint64_t token = ticketing_ticket_token(ticket);
/* In the same DB transaction: verify/update token high-water and perform the business write. */
ticketing_release(ticket, NULL);
}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 cocok dengan client_tokens di server, dan TLS punya empat mode: off / system trust store / CA tertentu / lewati verifikasi (khusus test).
const char *addrs[] = {"10.0.0.1:5225", "10.0.0.2:5225", "10.0.0.3:5225"};
ticketing_options options = {
.token = "123",
.tls = "system-roots", /* NULL(off) | "insecure-skip-verify" | path ke file CA */
};
ticketing_result error;
ticketing_broker *broker = ticketing_connect_with(addrs, 3, &options, &error);Konfigurasi token, TLS, dan cluster di sisi server bisa dibuat di halaman Deployment Server Ticketing.