menuTicketing
close





Ticketing Java / Kotlin लाइब्रेरी

GitHub

यह लाइब्रेरी एक ही JVM में Java और Kotlin दोनों API को साथ समेटे हुए है। TicketBroker Kotlin कोरूटीन आधारित API है, और BlockingTicketBroker कोरूटीन के बिना उपयोग किया जा सकने वाला Java-अनुकूल ब्लॉकिंग फ़ासाड (java.time.Duration आधारित) है। आंतरिक रूप से दोनों एक ही ब्रोकर को रैप करते हैं।

रिपोजिटरी

Java, Kotlinhome_and_garden
xml
kts

उदाहरण

Kotlin (कोरूटीन)

kotlin
val broker = TicketBroker.connect("127.0.0.1:5225")
broker.waitReady(5.seconds)

val ticket = broker.acquire("key", 5.seconds, 30.seconds)
ticket.release()

broker.close()

समवर्तीता उदाहरण (खाता-वार लॉक से जमा/निकासी का अन्योन्य बहिष्करण):

kotlin
suspend fun transaction(broker: TicketBroker, account: Int, delta: Long) {
    val key = "account-$account"
    val ticket = try {
        broker.acquire(key, wait, lease)
    } catch (e: Exception) {
        log.error("account {} acquire failed: {}", account, e.message)
        return
    }
    try {
        val before = balances[account]
        yield()
        balances[account] = before + delta
    } finally {
        ticket.close() // पृष्ठभूमि में स्वचालित रिलीज़
    }
    val (action, sign) = if (delta < 0) "withdraw" to '-' else "deposit" to '+'
    log.info("account $account $action $sign\$$AMOUNT -> \$${balances[account]}")
}

Java (ब्लॉकिंग)

java
try (BlockingTicketBroker broker = BlockingTicketBroker.connect(List.of("127.0.0.1:5225"))) {
    broker.waitReady(Duration.ofSeconds(5));

    BlockingTicket ticket = broker.acquire("key", Duration.ofSeconds(5), Duration.ofSeconds(30));
    ticket.release();

    System.out.println("pass");
}

समवर्तीता उदाहरण (खाता-वार लॉक, ExecutorService से कई थ्रेड में समवर्ती निष्पादन):

java
void transaction(BlockingTicketBroker broker, int account, long delta) {
    String key = "account-" + account;
    try (BlockingTicket ticket = broker.acquire(key, WAIT, LEASE)) {
        long before = balances[account];
        Thread.yield();
        balances[account] = before + delta;
    }
    String action = delta < 0 ? "withdraw" : "deposit";
    char sign = delta < 0 ? '-' : '+';
    log.info("account {} {} {}${} -> ${}", account, action, sign, AMOUNT, balances[account]);
}

पूर्ण उदाहरण ExampleSimpleTest.kt / ExampleBankTest.kt (Kotlin), ExampleSimpleJavaTest.java / ExampleBankJavaTest.java (Java) में देखें।