Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan transaksi diedarkan Java menggunakan Apache Ignite

Bagaimana untuk melaksanakan transaksi diedarkan Java menggunakan Apache Ignite

王林
Lepaskan: 2024-06-06 10:32:15
asal
422 orang telah melayarinya

Apache Ignite membolehkan mengekalkan konsistensi data dalam persekitaran yang diedarkan melalui enjin transaksi yang diedarkan. Aplikasi perbankan Java menunjukkan cara melaksanakan urus niaga menggunakan Ignite: nod induk mencipta transaksi dengan konkurensi pesimis dan tahap pengasingan bacaan berulang, mendapatkan akaun daripada cache, mendebitkan jumlah, menyimpan akaun dan melakukan transaksi. Buat konkurensi optimistik dan transaksi peringkat pengasingan bersiri daripada nod, dapatkan akaun, semak baki, tolak amaun, simpan akaun dan lakukan transaksi. Jalankan aplikasi dan tonton konsol memaparkan output bahawa pemindahan itu berjaya.

如何使用 Apache Ignite 实现 Java 分布式事务

Cara menggunakan Apache Ignite untuk melaksanakan transaksi yang diedarkan Java

Pengenalan

Apache Ignite ialah platform pengkomputeran teragih dengan prestasi dan skalabiliti yang sangat baik. Ia menyediakan enjin pemprosesan transaksi yang membolehkan pembangun membina aplikasi yang sangat konsisten dan berprestasi dalam persekitaran yang diedarkan.

Kes Praktikal

Untuk menunjukkan cara menggunakan Apache Ignite untuk melaksanakan transaksi yang diedarkan, kami mencipta aplikasi perbankan yang mudah. Aplikasi ini akan terdiri daripada dua nod, nod induk dan nod hamba.

pom.xml

<dependency>
  <groupId>org.apache.ignite</groupId>
  <artifactId>ignite-core</artifactId>
  <version>2.15.0</version>
</dependency>
Salin selepas log masuk

Nod induk

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
import org.apache.ignite.transactions.TransactionIsolation;

public class MainNode {

  public static void main(String[] args) {
    // 初始化 Ignite 实例
    Ignite ignite = Ignition.start();

    // 获取账户缓存
    IgniteCache<Long, Account> accountCache = ignite.cache("Account");

    // 创建主事务
    try (Transaction tx = ignite.transactions().txStart(TransactionConcurrency.PESSIMISTIC,
        TransactionIsolation.REPEATABLE_READ)) {

      // 从缓存中加载账户
      Account account = accountCache.get(1L);

      // 提取 100 美元
      account.setBalance(account.getBalance() - 100);

      // 保存账户
      accountCache.put(1L, account);

      // 提交事务
      tx.commit();

      System.out.println("转账成功!");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
Salin selepas log masuk

Nod hamba

import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
import org.apache.ignite.transactions.TransactionIsolation;

public class SlaveNode {

  public static void main(String[] args) {
    // 初始化 Ignite 实例
    Ignite ignite = Ignition.start();

    // 获取账户缓存
    IgniteCache<Long, Account> accountCache = ignite.cache("Account");

    // 创建从事务
    try (Transaction tx = ignite.transactions().txStart(TransactionConcurrency.OPTIMISTIC,
        TransactionIsolation.SERIALIZABLE)) {

      // 从缓存中加载账户
      Account account = accountCache.get(1L);

      // 检查账户余额是否足够
      if (account.getBalance() < 100) {
        tx.rollback();  // 余额不足,回滚事务
      }

      // 提取 100 美元
      account.setBalance(account.getBalance() - 100);

      // 保存账户
      accountCache.put(1L, account);

      // 提交事务
      tx.commit();

      System.out.println("转账成功!");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
Salin selepas log masuk

Kelas akaun

Kelas akaun

Rreee

  1. inNode, yang akan membuat transaksi utama dan melakukan pemindahan beroperasi.
  2. Jalankan SlaveNode, yang akan membuat transaksi hamba dan mengesahkan bahawa bakinya mencukupi.
  3. Perhatikan output konsol, ia akan mencetak mesej bahawa pemindahan itu berjaya.

Kod di atas menunjukkan cara menggunakan Apache Ignite untuk melaksanakan transaksi teragih merentas berbilang nod. Ia memastikan atomicity, konsistensi, pengasingan dan ketahanan (ACID) operasi transaksi. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan transaksi diedarkan Java menggunakan Apache Ignite. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan