网站怎么看好与不好,备用网站域名,网站内容多 询盘,关键词排名怎么查一、Seata简介1、Seata组件Seata是一款开源的分布式事务解决方案#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA、XA事务模式#xff0c;为用户打造一站式的分布式解决方案。2、支持模式AT 模式基于支持本地 ACID 事务的关系型数…一、Seata简介1、Seata组件Seata是一款开源的分布式事务解决方案致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA、XA事务模式为用户打造一站式的分布式解决方案。2、支持模式AT 模式基于支持本地 ACID 事务的关系型数据库。Java应用通过 JDBC 访问数据库。一阶段业务数据和回滚日志记录在同一个本地事务中提交释放本地锁和连接资源。二阶段提交异步化非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。TCC模式一个分布式的全局事务整体是两阶段提交的模型全局事务是由若干分支事务组成的分支事务要满足两阶段提交的模型要求即需要每个分支事务都具备自己的一阶段 prepare 行为二阶段 commit 或 rollback 行为Saga模式Saga模式是SEATA提供的长事务解决方案在Saga模式中业务流程中每个参与者都提交本地事务当出现某一个参与者失败则补偿前面已经成功的参与者一阶段正向服务和二阶段补偿服务都由业务开发实现。XA模式XA是一个分布式事务协议对业务无侵入的分布式事务解决方案XA提交协议需要事务参与者的数据库支持XA事务具有强一致性在两阶段提交的整个过程中一直会持有资源的锁性能不理想的缺点很明显。二、服务端部署1、下载组件包1.2版本seata-server-1.2.0.zip解压目录bin存放服务端运行启动脚本;lib存放服务端依赖的资源jar包conf配置文件目录。2、修改配置file.conf配置mode:db 即使用数据库存储事务信息这里还可以选择file存储方式。file模式为单机模式全局事务会话信息内存中读写并持久化本地文件root.data性能较高;db模式为高可用模式全局事务会话信息通过db共享相应性能差些;redis模式Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置合适当前场景的redis持久化配置.store { ## store mode: file、db mode db db { datasource druid dbType mysql driverClassName com.mysql.jdbc.Driver url jdbc:mysql://127.0.0.1:3306/seata_server user root password 123456 minConn 5 maxConn 30 globalTable global_table branchTable branch_table lockTable lock_table queryLimit 100 maxWait 5000 }}registry.conf配置这里选择eureka作为注册中心seata-server也要作为一个服务添加到注册中心不使用配置中心所以config配置默认即可。registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type eureka eureka { serviceUrl http://localhost:8761/eureka application default weight 1 }}3、事务管理表需要在seata-server即上述配置的MySQL库中建立3张事务管理表全局事务global_table分支事务branch_table全局锁lock_table事务回滚undo_logSQL脚本mysql-script目录4、启动命令Linux环境sh seata-server.sh三、业务服务搭建1、代码结构seata-eureka注册中心seata-order订单服务seata-account账户服务seata-inventor库存服务seata-client客户端服务account-feign账户Feign接口inventory-feign库存Feign接口order-feign订单Feign接口请求链路客户端-订单-账户库存测试整个流程的分布式事务问题。2、数据库结构seata_serverseata组件服务端依赖库seata_account模拟账户数据库seata_inventor模拟库存数据库seata_order模拟订单数据库各个库脚本位置mysql-script/data-biz.sql3、启动服务依次启动注册中心库存服务账户服务订单服务客户端服务Eureka服务列表如下四、Seata用法详解1、Seata基础配置几个基础服务的配置方式一样。conf配置file.conf重点关注下面内容事务组的名称需要在yml文件中使用。my_test_tx_group defaultregistry.conf是注册中心的选择。2、数据库配置注意这里的事务组名称配置。spring: # 事务组的名称 cloud: alibaba: seata: tx-service-group: my_test_tx_group # 数据源配置 datasource: type: com.alibaba.druid.pool.DruidDataSource druid: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/seata_account username: root password: 123456将数据库整体由Seata进行代理管理核心APIDataSourceProxy。Configurationpublic class SeataAccountConfig { Value(${spring.application.name}) private String applicationName; Bean public GlobalTransactionScanner globalTransactionScanner() { return new GlobalTransactionScanner(applicationName, test-tx-group); } Bean ConfigurationProperties(prefix spring.datasource.druid) public DruidDataSource druidDataSource() { return new DruidDataSource() ; } Primary Bean(dataSource) public DataSourceProxy dataSourceProxy(DataSource druidDataSource) { return new DataSourceProxy(druidDataSource); } Bean public SqlSessionFactory sqlSessionFactory(DataSourceProxy dataSourceProxy)throws Exception{ SqlSessionFactoryBean sqlSessionFactoryBean new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSourceProxy); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(classpath*:/mapper/*.xml)); sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); return sqlSessionFactoryBean.getObject(); }}3、业务代码核心注解GlobalTransactional管理整体的分布式事务。Servicepublic class OrderServiceImpl implements OrderService { private final Logger LOGGER LoggerFactory.getLogger(OrderServiceImpl.class); Resource private OrderMapper orderMapper ; Resource private AccountFeign accountFeign ; Resource private InventoryFeign inventoryFeign ; GlobalTransactional Override public Integer createOrder(String orderNo) { LOGGER.info(Order 生成中 orderNo); // 本服务下订单库 Integer insertFlag orderMapper.insert(orderNo) ; // 基于feign接口处理账户和库存 accountFeign.updateAccount(10L) ; inventoryFeign.updateInventory(10) ; return insertFlag ; }}测试流程在任意服务下抛出异常观察整体的事务状态观察是否有整体的事务控制效果。