বর্তমানে পরীক্ষা চলছে: সম্পূর্ণ হলে GitHub কোড উন্মুক্ত করা হবে।

Ticketing Rust লাইব্রেরি

GitHub crates.io

রিপোজিটরি

toml

উদাহরণ

সাধারণ উদাহরণ

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 নয়।

rust
use std::time::Duration;
use ticketing::TicketBroker;

let broker = TicketBroker::connect(["127.0.0.1:5225"]);
broker.wait_ready(Duration::from_secs(5)).await;

let ticket = broker.acquire(
    "key",
    Duration::from_secs(5),
    Duration::from_secs(30),
    Duration::from_secs(2),
).await?;
let token = ticket.token();
// In the same DB transaction: verify/update token high-water and perform the business write.
ticket.release().await?;

Automatic close/drop bounded best-effort release। Result দরকার হলে explicit release API ব্যবহার করুন। Token দিয়ে একই DB transaction-এ protected write fence করা বাধ্যতামূলক।

যে আচরণগুলো জানা ভালো

  • একটি request byte-ও send হয়ে থাকতে পারে এবং final response হারালে ফল Indeterminate। একই owner দিয়ে A auto-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 করে। R success, N absent/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_water reject, high-water update ও business write, তারপর commit/rollback এবং release।

নিরাপত্তা অপশন (টোকেন · TLS)

সবগুলো অপশনই ঐচ্ছিক। token অবশ্যই সার্ভারের client_tokens-এর সাথে মিলতে হবে, আর TLS-এর চারটি মোড আছে: বন্ধ / সিস্টেম ট্রাস্ট স্টোর / নির্দিষ্ট CA / যাচাই বাদ দেওয়া (শুধু টেস্টের জন্য)।

rust
use ticketing::{TicketBroker, TlsMode};

let broker = TicketBroker::builder()
    .addrs(["10.0.0.1:5225", "10.0.0.2:5225", "10.0.0.3:5225"])
    .token("123")
    .tls(TlsMode::SystemRoots)
    // .tls(TlsMode::Ca("ca.crt".into()))
    // .tls(TlsMode::InsecureSkipVerify)
    .connect()?;

সার্ভার পাশের টোকেন · TLS · ক্লাস্টার কনফিগারেশন Ticketing সার্ভার ডিপ্লয়মেন্ট পেজে তৈরি করা যায়।