Apache Ignite を使用すると、分散トランザクション エンジンを通じて分散環境でデータの一貫性を維持できます。 Java バンキング アプリケーションは、Ignite を使用してトランザクションを実装する方法を示します。マスター ノードは、悲観的な同時実行性と反復可能な読み取り分離レベルでトランザクションを作成し、キャッシュから口座を取得し、金額を引き落とし、口座を保存してトランザクションをコミットします。オプティミスティック同時実行性とシリアル化可能な分離レベルのトランザクションをノードから作成し、アカウントを取得し、残高を確認して金額を差し引き、アカウントを保存してトランザクションをコミットします。アプリケーションを実行し、転送が成功したことを示す出力がコンソールに表示されるのを確認します。
Apache Ignite を使用して Java 分散トランザクションを実装する方法
はじめに
Apache Ignite は、優れたパフォーマンスとスケーラビリティを備えた分散コンピューティング プラットフォームです。開発者が分散環境で一貫性とパフォーマンスの高いアプリケーションを構築できるようにするトランザクション処理エンジンを提供します。
実践例
Apache Ignite を使用して分散トランザクションを実装する方法を示すために、単純な銀行アプリケーションを作成します。アプリケーションは、マスター ノードとスレーブ ノードの 2 つのノードで構成されます。
pom.xml
<dependency> <groupId>org.apache.ignite</groupId> <artifactId>ignite-core</artifactId> <version>2.15.0</version> </dependency>
マスターノード
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(); } } }
スレーブノード
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(); } } }
アカウントクラス
public class Account { private Long id; private double balance; // 省略 getters 和 setters }
アプリケーションを実行
上記のコードは、Apache Ignite を使用して複数のノードに分散トランザクションを実装する方法を示しています。これにより、トランザクション操作のアトミック性、一貫性、分離性、耐久性 (ACID) が保証されます。
以上がApache Ignite を使用して Java 分散トランザクションを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。