Seata是Alibaba开源的一款分布式事务高效率
来源:设计 2024年11月12日 12:16
eWriteBufferCacheSize = 16384 # when recover batch read size sessionReloadReadSize = 100 # async, sync flushDiskMode = async } ## database store property db { ## the implement of jax.SQL.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc. datasource = "druid" ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.jdbc.Driver" url = "jdbc:mysql://192.168.7.231:3306/seata-server?useUnicode=trueSimoncharacterEncoding=utf8SimoncharacterSetResults=utf8" user = "root" password = "root" minConn = 5 maxConn = 100 globalTable = "global_table" branchTable = "branch_table" lockTable = "lock_table" queryLimit = 100 maxWait = 5000 } ## redis store property redis { host = "127.0.0.1" port = "6379" password = "" database = "0" minConn = 1 maxConn = 10 maxTotal = 100 queryLimit = 100 }}registry.confregistry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" loadBalance = "RandomLoadBalance" loadBalanceVirtualNodes = 10 nacos { application = "seata-server" serverAddr = "192.168.7.231:8848" group = "SEATA_GROUP" # 名称密闭ID,上头都会进行介绍 namespace = "5c2d3558-01c2-4f88-951b-e6d990872d5c" cluster = "default" username = "nacos" password = "nacos" } eureka { serviceUrl = "" application = "default" weight = "1" } redis { serverAddr = "localhost:6379" db = 0 password = "" cluster = "default" timeout = 0 } zk { cluster = "default" serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } consul { cluster = "default" serverAddr = "127.0.0.1:8500" } etcd3 { cluster = "default" serverAddr = "" } sofa { serverAddr = "127.0.0.1:9603" application = "default" region = "DEFAULT_ZONE" datacenter = "DefaultDataCenter" cluster = "default" group = "SEATA_GROUP" addressWaitTime = "3000" } file { name = "file.conf" }}config { # file、nacos 、apollo、zk、consul、etcd3 type = "nacos" nacos { serverAddr = "192.168.7.231:8848" # 名称密闭ID,上头都会进行介绍 namespace = "5c2d3558-01c2-4f88-951b-e6d990872d5c" group = "SEATA_GROUP" username = "nacos" password = "nacos" } consul { serverAddr = "127.0.0.1:8500" } apollo { appId = "seata-server" apolloMeta = "" namespace = "application" apolloAccesskeySecret = "" } zk { serverAddr = "127.0.0.1:2181" sessionTimeout = 6000 connectTimeout = 2000 username = "" password = "" } etcd3 { serverAddr = "" } file { name = "file.conf" }}加载SQL由于我们系统建筑设计于了dbMode打印日常事务都会话,所以我们所需成立一个seat-server元数据库,建表sql在源码包里面,这是是要点不然根本发觉不到解压zip贤件SQL脚本位置: seata-1.4.1scriptserverdbmysql.sql 成立元数据库加载脚本 SQL脚本官方URLSET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 Table structure for branch_table;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有DROP TABLE IF EXISTS MLT-branch_tableMLT-;CREATE TABLE MLT-branch_tableMLT- ( MLT-branch_idMLT- bigint(20) NOT NULL, MLT-xidMLT- varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, MLT-transaction_idMLT- bigint(20) NULL DEFAULT NULL, MLT-resource_group_idMLT- varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-resource_idMLT- varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-lock_keyMLT- varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-branch_typeMLT- varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-statusMLT- tinyint(4) NULL DEFAULT NULL, MLT-client_idMLT- varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-application_dataMLT- varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-gmt_createMLT- datetime(0) NULL DEFAULT NULL, MLT-gmt_modifiedMLT- datetime(0) NULL DEFAULT NULL, PRIMARY KEY (MLT-branch_idMLT-) USING BTREE, INDEX MLT-idx_xidMLT-(MLT-xidMLT-) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 Records of branch_table;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 Table structure for global_table;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有DROP TABLE IF EXISTS MLT-global_tableMLT-;CREATE TABLE MLT-global_tableMLT- ( MLT-xidMLT- varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, MLT-transaction_idMLT- bigint(20) NULL DEFAULT NULL, MLT-statusMLT- tinyint(4) NOT NULL, MLT-application_idMLT- varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-transaction_service_groupMLT- varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-transaction_nameMLT- varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-timeoutMLT- int(11) NULL DEFAULT NULL, MLT-begin_timeMLT- bigint(20) NULL DEFAULT NULL, MLT-application_dataMLT- varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-gmt_createMLT- datetime(0) NULL DEFAULT NULL, MLT-gmt_modifiedMLT- datetime(0) NULL DEFAULT NULL, PRIMARY KEY (MLT-xidMLT-) USING BTREE, INDEX MLT-idx_gmt_modified_statusMLT-(MLT-gmt_modifiedMLT-, MLT-statusMLT-) USING BTREE, INDEX MLT-idx_transaction_idMLT-(MLT-transaction_idMLT-) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 Records of global_table;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 Table structure for lock_table;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有DROP TABLE IF EXISTS MLT-lock_tableMLT-;CREATE TABLE MLT-lock_tableMLT- ( MLT-row_keyMLT- varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, MLT-xidMLT- varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-transaction_idMLT- mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, MLT-branch_idMLT- mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, MLT-resource_idMLT- varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-table_nameMLT- varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-pkMLT- varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, MLT-gmt_createMLT- datetime(0) NULL DEFAULT NULL, MLT-gmt_modifiedMLT- datetime(0) NULL DEFAULT NULL, PRIMARY KEY (MLT-row_keyMLT-) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有 Records of lock_table;还有 ;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有SET FOREIGN_KEY_CHECKS = 1;关机先以关机Nacos,如此一来系统建筑设计于seata-server中所/bin/seata-server.bat贤件关机seata-server。系统建筑设计于Nacos作为Seata的装配中所心首先以要填充名称密闭,也可以系统建筑设计于默认的完整版nacos-config.sh和config.txt,点击进入完整版页改写config.txt装配,config.txt放在seata贤件夹根查找亦可,nacos-config.sh另建script查找
宫颈癌的哪8种症状表现
长时间腹泻是什么原因
安必丁对胃有伤害吗
如何养好肠道菌群
坦洛新和盐酸坦洛新缓释胶囊是一种药吗
肝不好吃什么药
保列治和盐酸坦洛新缓释片怎么选择
谈咳宁乙酰半胱氨酸颗粒
肺炎
4.打开git bash或linux类命令行,执行sh脚本(肯定脚本是否有执行的权限)
-h nacosURL-p 端口-t 名称密闭不写默认public-u 普通账号-p 密码sh nacos-config.sh -h 192.168.7.231 -p 8848 -g SEATA_GROUP -t 5c2d3558-01c2-4f88-951b-e6d990872d5c -u nacos -w nacos5.查询装配是推送刚才
RM客户端充分利用元数据库马上成立业务部门元数据库seata-order:打印交付的元数据库seata-storage:打印全数的元数据库seata-account:打印账号电子邮件的元数据库加载业务部门表order表CREATE TABLE MLT-orderMLT- ( MLT-idMLT- bigint(11) NOT NULL AUTO_INCREMENT, MLT-user_idMLT- bigint(11) DEFAULT NULL COMMENT '普通用户id', MLT-product_idMLT- bigint(11) DEFAULT NULL COMMENT '厂商id', MLT-countMLT- int(11) DEFAULT NULL COMMENT '数量', MLT-moneyMLT- decimal(11,0) DEFAULT NULL COMMENT '金额', PRIMARY KEY (MLT-idMLT-)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;ALTER TABLE MLT-orderMLT- ADD COLUMN MLT-statusMLT- int(1) DEFAULT NULL COMMENT '交付状态:0:成立中所;1:已进行时' AFTER MLT-moneyMLT- ;storage表CREATE TABLE MLT-storageMLT- ( MLT-idMLT- bigint(11) NOT NULL AUTO_INCREMENT, MLT-product_idMLT- bigint(11) DEFAULT NULL COMMENT '厂商id', MLT-totalMLT- int(11) DEFAULT NULL COMMENT '总全数', MLT-usedMLT- int(11) DEFAULT NULL COMMENT '已用全数', MLT-residueMLT- int(11) DEFAULT NULL COMMENT '全数全数', PRIMARY KEY (MLT-idMLT-)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;INSERT INTO MLT-seata-storageMLT-.MLT-storageMLT- (MLT-idMLT-, MLT-product_idMLT-, MLT-totalMLT-, MLT-usedMLT-, MLT-residueMLT-) VALUES ('1', '1', '100', '0', '100');account表CREATE TABLE MLT-accountMLT- ( MLT-idMLT- bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id', MLT-user_idMLT- bigint(11) DEFAULT NULL COMMENT '普通用户id', MLT-totalMLT- decimal(10,0) DEFAULT NULL COMMENT '总额度', MLT-usedMLT- decimal(10,0) DEFAULT NULL COMMENT '已用本金', MLT-residueMLT- decimal(10,0) DEFAULT '0' COMMENT '全数比如说额度', PRIMARY KEY (MLT-idMLT-)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;INSERT INTO MLT-seata-accountMLT-.MLT-accountMLT- (MLT-idMLT-, MLT-user_idMLT-, MLT-totalMLT-, MLT-usedMLT-, MLT-residueMLT-) VALUES ('1', '1', '1000', '0', '1000');成立都会话回滚表系统建筑设计于Seata还所需在每个元数据库中所成立都会话表
;还有 肯定此处0.3.0+ 减低唯一查找 ux_undo_logCREATE TABLE MLT-undo_logMLT- ( MLT-idMLT- bigint(20) NOT NULL AUTO_INCREMENT, MLT-branch_idMLT- bigint(20) NOT NULL, MLT-xidMLT- varchar(100) NOT NULL, MLT-contextMLT- varchar(128) NOT NULL, MLT-rollback_infoMLT- longblob NOT NULL, MLT-log_statusMLT- int(11) NOT NULL, MLT-log_createdMLT- datetime NOT NULL, MLT-log_modifiedMLT- datetime NOT NULL, MLT-extMLT- varchar(100) DEFAULT NULL, PRIMARY KEY (MLT-idMLT-), UNIQUE KEY MLT-ux_undo_logMLT- (MLT-xidMLT-,MLT-branch_idMLT-)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;成立顺利完成此后的元数据库 充分利用一个业务部门场景这里我们都会成立三个客户服务,一个交付客户服务,一个全数客户服务,一个账号客户服务。当普通用户交付时,都会在交付客户服务中所成立一个交付,然后通过远程呼叫全数客户服务来扣除交付的产品的全数,如此一来通过远程呼叫账号客户服务来扣除普通用户账号里面的本金,就此在交付客户服务中所改写交付状态为已顺利完成。该操作方法连接起来三个元数据库,有两次远程呼叫,很微小都会有分布式日常事务解决办法。
建设项目搭建POM贤件 org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASE 1.8 Greenwich.SR1 2.1.0.RELEASE 1.4.2 1.18.8 3.4.0 com.alibaba.cloud spring-cloud-starter-alibaba-seata seata-all io.seata io.seata seata-spring-boot-starter ${seata.version} io.seata seata-all ${seata.version} com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-openfeign com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} com.baomidou mybatis-plus-generator ${mybatis-plus.version} org.freemarker freemarker 2.3.28 org.apache.velocity velocity-engine-core 2.0 org.springframework.boot spring-boot-starter-web mysql mysql-connector-ja runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.jupiter junit-jupiter RELEASE test org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import org.projectlombok lombok ${lombok.version} YML装配三个客户服务的装配贤件大体一样,主要还是改成客户服务名server: port: 8083spring: application: name: seata-order-samples cloud: nacos: discovery: #nacos客户服务URL server-addr: 192.168.7.231:8848 #nacos名称密闭ID namespace: 5c2d3558-01c2-4f88-951b-e6d990872d5c alibaba: seata: #日常事务不相关的,要和正上方vgroup-mapping保持一致(可以每个系统建筑设计脱离原是,也可以系统建筑设计于相同的名字),要与客户服务端nacos-config.txt中所service.vgroup_mapping中所存在,并且要应有多个不相关的情况下后缀名要保持一致-tx_group tx-service-group: ${spring.application.name}-tx_group datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.7.231:3306/seata-order?serverTimezone=Asia/ShanghaiSimonuseUnicode=trueSimoncharacterEncoding=utf-8SimonzeroDateTimeBehior=convertToNullSimonuseSSL=falseSimonallowPublicKeyRetrieval=true username: root password: rootseata: application-id: ${spring.application.name} #日常事务不相关的(可以每个系统建筑设计脱离原是,也可以系统建筑设计于相同的名字),要与客户服务端nacos-config.txt中所service.vgroup_mapping中所存在,并且要应有多个不相关的情况下后缀名要保持一致-tx_group service: vgroup-mapping: seata-order-samples-tx_group: default registry: type: nacos nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} username: nacos password: nacos #seata第一组名称 group: SEATA_GROUP #nacos名称密闭ID namespace: 5c2d3558-01c2-4f88-951b-e6d990872d5c #seata客户服务名 application: seata-server config: type: nacos nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} username: nacos password: nacos #seata第一组名称 group: SEATA_GROUP #nacos名称密闭ID namespace: 5c2d3558-01c2-4f88-951b-e6d990872d5c# feign缓冲内置确保安全设置,用于查询seata元数据库中所的临时数据库内容feign: client: config: default: connect-timeout: 30000 read-timeout: 30000mybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl数据库模型代理DataSourceProxyConfig 涉及到分布式日常事务的客户服务都所需填充数据库模型代理package com.seata.order.config;import com.alibaba.druid.pool.DruidDataSource;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;import io.seata.rm.datasource.DataSourceProxy;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.transaction.SpringManagedTransactionFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import jax.sql.DataSource;/** * TODO * Mybtis-plus数据库模型代理 * * @version 1.0 * @date 2021/5/28 10:45 */@Configurationpublic class DataSourceProxyConfig { @Value("${mybatis-plus.mapper-locations}") private String mapperLocations; @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druidDataSource() { return new DruidDataSource(); } @Bean public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(mapperLocations)); sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); return sqlSessionFactoryBean.getObject(); }}关机类装配//掀开feign硬件@EnableFeignClients//特许客户服务@EnableDiscoveryClient//扫描包@MapperScan(value = "com.seata.order.dao")//排除默认数据库模型装配@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)业务部门编译内置 /** * 成立交付->呼叫全数客户服务扣除全数->呼叫账号客户服务扣除账号本金->改写交付状态 */ @Override //掀开分布式日常事务 @GlobalTransactional public void create(Order order) { LOGGER.info(";还有;还有;还有->交付开始"); //本系统建筑设计成立交付 orderMapper.insertOrder(order); //远程呼叫全数客户服务扣除全数 LOGGER.info(";还有;还有;还有->seata-order-samples中所扣除全数开始;还有;还有;还有-<"); storageFeignClient.decrease(order.getProductId(), order.getCount()); LOGGER.info(";还有;还有;还有->seata-order-samples中所扣除全数结束;还有;还有;还有-<"); //远程呼叫账号客户服务扣除本金 LOGGER.info(";还有;还有;还有->seata-order-samples中所扣除本金开始;还有;还有;还有-<"); accountFeignClient.decrease(order.getUserId(), order.getMoney()); LOGGER.info(";还有;还有;还有->seata-order-samples中所扣除本金结束;还有;还有;还有-<"); //改写交付状态为已顺利完成 LOGGER.info(";还有;还有;还有->seata-order-samples中所改写交付状态开始;还有;还有;还有-<"); orderMapper.update(order.getUserId(), 0); LOGGER.info(";还有;还有;还有->seata-order-samples中所改写交付状态结束;还有;还有;还有-<"); LOGGER.info(";还有;还有;还有->交付结束;还有;还有;还有-<"); }错误异常编译内置,账号客户服务模块化@Overridepublic void decrease(Long userId, BigDecimal money) { LOGGER.info(";还有;还有;还有->seata-account-samples中所扣除账号本金开始;还有;还有;还有-<"); //模拟确保安全异常,简而言之日常事务回滚 try { Thread.sleep(30*1000); } catch (InterruptedException e) { e.printStackTrace(); } accountMapper.decrease(userId,money); LOGGER.info(";还有;还有;还有->seata-account-samples中所扣除账号本金结束;还有;还有;还有-<");}。肾衰竭的治疗方法宫颈癌的哪8种症状表现
长时间腹泻是什么原因
安必丁对胃有伤害吗
如何养好肠道菌群
坦洛新和盐酸坦洛新缓释胶囊是一种药吗
肝不好吃什么药
保列治和盐酸坦洛新缓释片怎么选择
谈咳宁乙酰半胱氨酸颗粒
肺炎
相关阅读
-
X86和ARM断供俄罗斯,华北地区能RISC-V吗?
的都入会费,就能自动获董事都会成员席次和关键技术导师委员都会席次,后者提议SSE驱动程式的一旧版本和规格,这种方法使得全世上的行业都可以保有相异的机都会去争取话语权。 鲁宾贝雷这样描述