menuTicketing
close





Ticketing Ruby লাইব্রেরি

GitHub

রিপোজিটরি

উদাহরণ

মৌলিক উদাহরণ

সার্ভারে সংযুক্ত হয়ে একটি লক অর্জন করে সঙ্গে সঙ্গে ফেরত দেওয়ার সবচেয়ে সরল প্রবাহ।

ruby
broker = Broker.connect(addr)
begin
  broker.wait_ready(5)

  ticket = broker.acquire("key", wait: 5, lease: 30)
  ticket.release

  puts "pass"
ensure
  broker.close
end

কনকারেন্সি উদাহরণ (ডিস্ট্রিবিউটেড লক)

একাধিক থ্রেড একই সঙ্গে অ্যাকাউন্ট-ভিত্তিক লক দ্বারা সুরক্ষিত থেকে জমা/উত্তোলন বারবার করলেও, সব অ্যাকাউন্টের ব্যালেন্স শেষে শুরুর মানে ফিরে আসে কিনা যাচাই করার উদাহরণ।

ruby
def transaction(broker, balances, account, delta, log)
  key = "account-#{account}"
  ticket =
    begin
      broker.acquire(key, wait: WAIT, lease: LEASE)
    rescue StandardError => e
      log.error("account #{account} acquire failed: #{e}")
      return
    end

  before = balances[account]
  Thread.pass
  after = before + delta
  balances[account] = after
  ticket.release

  action, sign = delta < 0 ? ["withdraw", "-"] : ["deposit", "+"]
  log.info("account #{account} #{action} #{sign}$#{AMOUNT} -> $#{after}")
end

সম্পূর্ণ উদাহরণ test_example.rb, test_bank_example.rb, test_bench.rb-এ দেখুন।