2)解压在非中文目录解压缩这个zip包,其目录结构如下:
3)修改配置修改conf目录下的registry.conf文件:
内容如下:
registry { # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等 type = "nacos" nacos { # seata tc 服务注册到 nacos的服务名称,可以自定义 application = "seata-tc-server" serveraddr = "127.0.0.1:8848" group = "default_group" namespace = "" cluster = "sh" username = "nacos" password = "nacos" }}config { # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置 type = "nacos" # 配置nacos地址等信息 nacos { serveraddr = "127.0.0.1:8848" namespace = "" group = "seata_group" username = "nacos" password = "nacos" dataid = "seataserver.properties" }}
4)在nacos添加配置特别注意,为了让tc服务的集群可以共享配置,我们选择了nacos作为统一配置中心。因此服务端配置文件seataserver.properties文件需要在nacos中配好。
格式如下:
配置内容如下:
# 数据存储方式,db代表数据库store.mode=dbstore.db.datasource=druidstore.db.dbtype=mysqlstore.db.driverclassname=com.mysql.jdbc.driverstore.db.url=jdbc:mysql://127.0.0.1:3306/seata?useunicode=true&rewritebatchedstatements=truestore.db.user=rootstore.db.password=123store.db.minconn=5store.db.maxconn=30store.db.globaltable=global_tablestore.db.branchtable=branch_tablestore.db.querylimit=100store.db.locktable=lock_tablestore.db.maxwait=5000# 事务、日志等配置server.recovery.committingretryperiod=1000server.recovery.asyncommittingretryperiod=1000server.recovery.rollbackingretryperiod=1000server.recovery.timeoutretryperiod=1000server.maxcommitretrytimeout=-1server.maxrollbackretrytimeout=-1server.rollbackretrytimeoutunlockenable=falseserver.undo.logsavedays=7server.undo.logdeleteperiod=86400000# 客户端与服务端传输方式transport.serialization=seatatransport.compressor=none# 关闭metrics功能,提高性能metrics.enabled=falsemetrics.registrytype=compactmetrics.exporterlist=prometheusmetrics.exporterprometheusport=9898
其中的数据库地址、用户名、密码都需要修改成你自己的数据库信息。
5)创建数据库表特别注意:tc服务在管理分布式事务时,需要记录事务相关数据到数据库中,你需要提前创建好这些表。
新建一个名为seata的数据库,运行课前资料提供的sql文件:
这些表主要记录全局事务、分支事务、全局锁信息:
set names utf8mb4;set foreign_key_checks = 0;-- ------------------------------ 分支事务表-- ----------------------------drop table if exists `branch_table`;create table `branch_table` ( `branch_id` bigint(20) not null, `xid` varchar(128) character set utf8 collate utf8_general_ci not null, `transaction_id` bigint(20) null default null, `resource_group_id` varchar(32) character set utf8 collate utf8_general_ci null default null, `resource_id` varchar(256) character set utf8 collate utf8_general_ci null default null, `branch_type` varchar(8) character set utf8 collate utf8_general_ci null default null, `status` tinyint(4) null default null, `client_id` varchar(64) character set utf8 collate utf8_general_ci null default null, `application_data` varchar(2000) character set utf8 collate utf8_general_ci null default null, `gmt_create` datetime(6) null default null, `gmt_modified` datetime(6) null default null, primary key (`branch_id`) using btree, index `idx_xid`(`xid`) using btree) engine = innodb character set = utf8 collate = utf8_general_ci row_format = compact;-- ------------------------------ 全局事务表-- ----------------------------drop table if exists `global_table`;create table `global_table` ( `xid` varchar(128) character set utf8 collate utf8_general_ci not null, `transaction_id` bigint(20) null default null, `status` tinyint(4) not null, `application_id` varchar(32) character set utf8 collate utf8_general_ci null default null, `transaction_service_group` varchar(32) character set utf8 collate utf8_general_ci null default null, `transaction_name` varchar(128) character set utf8 collate utf8_general_ci null default null, `timeout` int(11) null default null, `begin_time` bigint(20) null default null, `application_data` varchar(2000) character set utf8 collate utf8_general_ci null default null, `gmt_create` datetime null default null, `gmt_modified` datetime null default null, primary key (`xid`) using btree, index `idx_gmt_modified_status`(`gmt_modified`, `status`) using btree, index `idx_transaction_id`(`transaction_id`) using btree) engine = innodb character set = utf8 collate = utf8_general_ci row_format = compact;set foreign_key_checks = 1;
6)启动tc服务进入bin目录,运行其中的seata-server.bat即可:
启动成功后,seata-server应该已经注册到nacos注册中心了。
打开浏览器,访问nacos地址:http://localhost:8848,然后进入服务列表页面,可以看到seata-tc-server的信息:
2.微服务集成seata 1)引入依赖1)引入依赖首先,我们需要在微服务中引入seata依赖:
<dependency> <groupid>com.alibaba.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-seata</artifactid> <exclusions> <!--版本较低,1.3.0,因此排除--> <exclusion> <artifactid>seata-spring-boot-starter</artifactid> <groupid>io.seata</groupid> </exclusion> </exclusions></dependency><!--seata starter 采用1.4.2版本--><dependency> <groupid>io.seata</groupid> <artifactid>seata-spring-boot-starter</artifactid> <version>${seata.version}</version></dependency>
2)修改配置文件需要修改application.yml文件,添加一些配置:
seata: registry: # tc服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址 # 参考tc服务自己的registry.conf中的配置 type: nacos nacos: # tc server-addr: 127.0.0.1:8848 namespace: "" group: default_group application: seata-tc-server # tc服务在nacos中的服务名称 cluster: sh tx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称 service: vgroup-mapping: # 事务组与tc服务cluster的映射关系 seata-demo: sh
3.tc服务的高可用和异地容灾 1)模拟异地容灾的tc集群1)模拟异地容灾的tc集群计划启动两台seata的tc服务节点:
节点名称ip地址端口号集群名称
seata 127.0.0.1 8091 sh
seata2 127.0.0.1 8092 hz
之前我们已经启动了一台seata服务,端口是8091,集群名为sh。
现在,将seata目录复制一份,起名为seata2
修改seata2/conf/registry.conf内容如下:
registry { # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等 type = "nacos" nacos { # seata tc 服务注册到 nacos的服务名称,可以自定义 application = "seata-tc-server" serveraddr = "127.0.0.1:8848" group = "default_group" namespace = "" cluster = "hz" username = "nacos" password = "nacos" }}config { # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置 type = "nacos" # 配置nacos地址等信息 nacos { serveraddr = "127.0.0.1:8848" namespace = "" group = "seata_group" username = "nacos" password = "nacos" dataid = "seataserver.properties" }}
进入seata2/bin目录,然后运行命令:
seata-server.bat -p 8092
打开nacos控制台,查看服务列表:
点进详情查看:
2)将事务组映射配置到nacos接下来,我们需要将tx-service-group与cluster的映射关系都配置到nacos配置中心。
新建一个配置:
配置的内容如下:
# 事务组映射关系service.vgroupmapping.seata-demo=shservice.enabledegrade=falseservice.disableglobaltransaction=false# 与tc服务的通信配置transport.type=tcptransport.server=niotransport.heartbeat=truetransport.enableclientbatchsendrequest=falsetransport.threadfactory.bossthreadprefix=nettybosstransport.threadfactory.workerthreadprefix=nettyservernioworkertransport.threadfactory.serverexecutorthreadprefix=nettyserverbizhandlertransport.threadfactory.sharebossworker=falsetransport.threadfactory.clientselectorthreadprefix=nettyclientselectortransport.threadfactory.clientselectorthreadsize=1transport.threadfactory.clientworkerthreadprefix=nettyclientworkerthreadtransport.threadfactory.bossthreadsize=1transport.threadfactory.workerthreadsize=defaulttransport.shutdown.wait=3# rm配置client.rm.asynccommitbufferlimit=10000client.rm.lock.retryinterval=10client.rm.lock.retrytimes=30client.rm.lock.retrypolicybranchrollbackonconflict=trueclient.rm.reportretrycount=5client.rm.tablemetacheckenable=falseclient.rm.tablemetacheckerinterval=60000client.rm.sqlparsertype=druidclient.rm.reportsuccessenable=falseclient.rm.sagabranchregisterenable=false# tm配置client.tm.commitretrycount=5client.tm.rollbackretrycount=5client.tm.defaultglobaltransactiontimeout=60000client.tm.degradecheck=falseclient.tm.degradecheckallowtimes=10client.tm.degradecheckperiod=2000# undo日志配置client.undo.datavalidation=trueclient.undo.logserialization=jacksonclient.undo.onlycareupdatecolumns=trueclient.undo.logtable=undo_logclient.undo.compress.enable=trueclient.undo.compress.type=zipclient.undo.compress.threshold=64kclient.log.exceptionrate=100
3)微服务读取nacos配置接下来,需要修改每一个微服务的application.yml文件,让微服务读取nacos中的client.properties文件:
seata: config: type: nacos nacos: server-addr: 127.0.0.1:8848 username: nacos password: nacos group: seata_group data-id: client.properties
重启微服务,现在微服务到底是连接tc的sh集群,还是tc的hz集群,都统一由nacos的client.properties来决定了。
lient.log.exceptionrate=100
## 3.微服务读取nacos配置接下来,需要修改每一个微服务的application.yml文件,让微服务读取nacos中的client.properties文件:```yamlseata: config: type: nacos nacos: server-addr: 127.0.0.1:8848 username: nacos password: nacos group: seata_group data-id: client.properties
重启微服务,现在微服务到底是连接tc的sh集群,还是tc的hz集群,都统一由nacos的client.properties来决定了。
以上就是java seata部署和集成的方法是什么的详细内容。
