免抵退税在哪个网站做中国卫生健康网入口

当前位置: 首页 > news >正文

免抵退税在哪个网站做,中国卫生健康网入口,山东网络推广图片,大鹏新区住房建设局网站分布式事务#xff1a;理论与实践 在现代分布式系统中#xff0c;分布式事务是一种确保跨多个独立系统的一致性和完整性的方法。本文将介绍分布式事务的基本概念、实现方式、在Java中的具体实现以及在实际应用中的案例。 分布式事务的基本概念 分布式事务涉及多个独立的数…分布式事务理论与实践 在现代分布式系统中分布式事务是一种确保跨多个独立系统的一致性和完整性的方法。本文将介绍分布式事务的基本概念、实现方式、在Java中的具体实现以及在实际应用中的案例。 分布式事务的基本概念 分布式事务涉及多个独立的数据库或系统在这些系统之间进行协调以确保数据的一致性。其目标是使得分布式系统中的多个操作要么全部成功要么全部失败从而保持系统的一致状态。 事务的ACID特性 在讨论分布式事务之前首先需要了解事务的ACID特性 原子性 (Atomicity)事务中的所有操作要么全部完成要么全部不完成。一致性 (Consistency)事务在完成时必须使数据库从一个一致性状态转变为另一个一致性状态。隔离性 (Isolation)多个事务并发执行时一个事务的执行不应影响其他事务的执行。持久性 (Durability)事务一旦完成其对数据库的更改应永久保存下来即使系统发生故障。 分布式事务的实现方式 实现分布式事务的方式有多种以下是常见的几种 二阶段提交协议2PC 二阶段提交协议Two-Phase Commit Protocol, 2PC是一种经典的分布式事务管理方法。它将事务提交分为两个阶段准备阶段和提交阶段。 准备阶段协调者向所有参与者发送准备请求并等待参与者反馈。参与者在收到请求后执行事务并记录日志然后返回准备就绪或失败。提交阶段如果所有参与者都返回准备就绪协调者向所有参与者发送提交请求如果有任何参与者返回失败协调者向所有参与者发送回滚请求。 三阶段提交协议3PC 三阶段提交协议Three-Phase Commit Protocol, 3PC是对2PC的改进主要在准备和提交之间增加了一个准备提交阶段以减少协调者和参与者在等待状态下的阻塞时间。 准备阶段与2PC相同。准备提交阶段协调者在收到所有参与者的准备就绪响应后向所有参与者发送准备提交请求并等待参与者确认。提交阶段如果所有参与者都确认准备提交协调者发送提交请求否则发送回滚请求。 基于消息队列的分布式事务 在一些场景中使用消息队列可以有效地实现分布式事务。通过消息队列系统可以实现事件驱动架构在确保消息可靠传递的基础上实现分布式系统中的事务一致性。 事件发送事务发起方在本地事务完成后将事件发送到消息队列。事件处理消息队列将事件分发给各个订阅者各订阅者在处理事件时执行相应的本地事务。事件确认订阅者在本地事务完成后向消息队列发送确认消息。 Java中的2PC实现 在Java中有几种框架和技术可以实现2PC协议最常见的是通过Java事务APIJTA、XA规范以及分布式事务管理器如Atomikos和Narayana来实现。 Java事务APIJTA JTA是Java EE中的一部分提供了一组标准的API用于管理分布式事务。JTA包含两个主要接口 UserTransaction用于管理事务的生命周期开始、提交、回滚。TransactionManager用于管理资源如数据库连接的事务上下文。 示例代码 import javax.transaction.UserTransaction; import javax.naming.InitialContext;public class DistributedTransactionExample {public static void main(String[] args) {UserTransaction utx null;try {InitialContext ctx new InitialContext();utx (UserTransaction) ctx.lookup(java:comp/UserTransaction);utx.begin();// 执行分布式事务操作performDistributedOperations();utx.commit();} catch (Exception e) {if (utx ! null) {try {utx.rollback();} catch (Exception rollbackEx) {rollbackEx.printStackTrace();}}e.printStackTrace();}}private static void performDistributedOperations() {// 执行跨多个数据库或系统的操作} }XA规范 XA是由X/Open组织提出的分布式事务处理标准。它定义了一套接口允许全局事务管理器和本地资源管理器如数据库之间进行通信。Java通过JTA支持XA规范。 示例代码 import javax.transaction.xa.XAResource; import javax.transaction.xa.Xid; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement;public class XADistributedTransactionExample {public static void main(String[] args) throws Exception {// 获取数据库连接Connection conn1 DriverManager.getConnection(jdbc:mysql://localhost:3306/db1, user, password);Connection conn2 DriverManager.getConnection(jdbc:mysql://localhost:3306/db2, user, password);// 获取XAResourceXAResource xaRes1 conn1.unwrap(XAResource.class);XAResource xaRes2 conn2.unwrap(XAResource.class);// 创建XidXid xid1 createXid(1);Xid xid2 createXid(2);try {// 开始分布式事务xaRes1.start(xid1, XAResource.TMNOFLAGS);xaRes2.start(xid2, XAResource.TMNOFLAGS);// 执行SQL操作PreparedStatement ps1 conn1.prepareStatement(INSERT INTO table1 (col1) VALUES (?));ps1.setString(1, value1);ps1.executeUpdate();PreparedStatement ps2 conn2.prepareStatement(INSERT INTO table2 (col1) VALUES (?));ps2.setString(1, value2);ps2.executeUpdate();// 结束分布式事务xaRes1.end(xid1, XAResource.TMSUCCESS);xaRes2.end(xid2, XAResource.TMSUCCESS);// 准备提交int prp1 xaRes1.prepare(xid1);int prp2 xaRes2.prepare(xid2);// 提交if (prp1 XAResource.XA_OK prp2 XAResource.XA_OK) {xaRes1.commit(xid1, false);xaRes2.commit(xid2, false);}} catch (Exception e) {// 回滚xaRes1.rollback(xid1);xaRes2.rollback(xid2);e.printStackTrace();}}private static Xid createXid(int id) {// 创建Xid实例的逻辑return new MyXid(id);}// Xid实现类static class MyXid implements Xid {private int id;MyXid(int id) {this.id id;}public int getFormatId() {return id;}public byte[] getGlobalTransactionId() {return new byte[0];}public byte[] getBranchQualifier() {return new byte[0];}} }Atomikos Atomikos是一个流行的Java分布式事务管理器支持JTA规范并提供对2PC的支持。它易于集成且性能良好。 示例代码 import com.atomikos.icatch.jta.UserTransactionManager; import javax.transaction.UserTransaction;public class AtomikosExample {public static void main(String[] args) {UserTransactionManager utm new UserTransactionManager();UserTransaction utx utm.getUserTransaction();try {utx.begin();// 执行分布式事务操作performDistributedOperations();utx.commit();} catch (Exception e) {try {utx.rollback();} catch (Exception rollbackEx) {rollbackEx.printStackTrace();}e.printStackTrace();}}private static void performDistributedOperations() {// 执行跨多个数据库或系统的操作} }分布式事务的应用案例 电商平台中的订单处理 在电商平台中订单处理通常涉及多个独立系统例如订单系统、支付系统和库存系统。通过分布式事务可以确保订单的各个操作在不同系统中一致完成避免出现支付成功但库存未更新的情况。 银行转账系统 在银行转账系统中转账操作需要同时更新多个账户的余额通过分布式事务可以确保转出账户和转入账户的余额更新一致避免资金丢失或不一致的情况。 参考链接 分布式事务https://en.wikipedia.org/wiki/Distributed_transaction二阶段提交协议https://en.wikipedia.org/wiki/Two-phase_commit_protocol三阶段提交协议https://en.wikipedia.org/wiki/Three-phase_commit_protocol基于消息队列的事务https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.htmlJava事务APIJTAhttps://docs.oracle.com/javaee/7/tutorial/transactions.htmAtomikoshttps://www.atomikos.com/Documentation/HowToUse