Ticketing C/C++ লাইব্রেরি
GitHubএখনও অফিসিয়াল vcpkg রেজিস্ট্রিতে নিবন্ধিত হয়নি — জমাদানের শর্তাবলী কঠোর এবং নিবন্ধন প্রক্রিয়া এখনও চলছে। আপাতত উপরের Github রিপোজিটরি ক্লোন করে নিজে বিল্ড করুন।
রিপোজিটরি
উদাহরণ
সাধারণ উদাহরণ
Application startup-এ একটি broker তৈরি করে share করুন। wait=0 queue ছাড়া একবার immediate attempt, সর্বোচ্চ 255 সেকেন্ড; lease 1–250 সেকেন্ড। শেষ minimum-work budget বাধ্যতামূলক এবং 0 হতে পারে। Sub-second ওপরের দিকে round হয়; out-of-range বা normalized lease-এর বেশি budget send-এর আগে reject হয়, 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);
}Automatic close/drop bounded best-effort release। Result দরকার হলে explicit release API ব্যবহার করুন। Token দিয়ে একই DB transaction-এ protected write fence করা বাধ্যতামূলক।
যে আচরণগুলো জানা ভালো
- একটি request byte-ও send হয়ে থাকতে পারে এবং final response হারালে ফল Indeterminate। একই owner দিয়ে
Aauto-resend নয়; caller critical section-এ যায় না। - Send-এর আগে cancel unsent; possible-send-এর পরে session বন্ধ। একই সময় grant token parse হলে bounded compensating exact-token release।
M, প্রতিটিE, malformed/oversized/unknown response session-fatal। Unresolved possible-send acquire Indeterminate।Bনিশ্চিত capacity rejection এবং সঙ্গে সঙ্গে ফেরে। Internal retry নেই; caller application backoff-এর পর নতুন owner দিয়ে নতুন acquire করতে পারে।- Explicit/compensating release exact token call/enqueue থেকে পরম 5 সেকেন্ড পর্যন্ত retry করে।
Rsuccess,Nabsent/not current; final response না হলে error, assumed success নয়। - Positive conservative remaining time ও পর্যাপ্ত work budget থাকলেই Ticket ফেরে। 250 সেকেন্ডের বেশি work send-এর আগে unsupported।
- Token DB fencing বাধ্যতামূলক: একই transaction-এ
token <= stored_high_waterreject, high-water update ও business write, তারপর commit/rollback এবং release।
নিরাপত্তা অপশন (টোকেন · TLS)
সবগুলো অপশনই ঐচ্ছিক। token অবশ্যই সার্ভারের client_tokens-এর সাথে মিলতে হবে, আর TLS-এর চারটি মোড আছে: বন্ধ / সিস্টেম ট্রাস্ট স্টোর / নির্দিষ্ট CA / যাচাই বাদ দেওয়া (শুধু টেস্টের জন্য)।
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" | CA ফাইলের পাথ */
};
ticketing_result error;
ticketing_broker *broker = ticketing_connect_with(addrs, 3, &options, &error);সার্ভার পাশের টোকেন · TLS · ক্লাস্টার কনফিগারেশন Ticketing সার্ভার ডিপ্লয়মেন্ট পেজে তৈরি করা যায়।