当前位置:   article > 正文

超简单seata1.4.0整合springcloudalibaba+nacos+dubbo_spring cloud alibaba+dubbo+nacos_seata

spring cloud alibaba+dubbo+nacos_seata

目录

一、环境配置

1.下载seata1.4.0

2.修改seata-server配置文件

3.在 nacos 中添加配置文件及事务组 

4.添加seata-server数据库

5.启动seata-server

二、配置客户端

1.springcloudalibaba+nacos整合

2.添加 seata maven 依赖

3.配置seata及setata事务组

4.为各自己的微服务的数据库添加表

5.使用注解


一、环境配置

相关软件:seata1.4.0   nacos1.3.2   mysql5.7

1.下载seata1.4.0

链接: https://pan.baidu.com/s/1joOTPZerhAWtUf90Y-lG1Q 提取码: purt 复制这段内容后打开百度网盘手机App,操作更方便哦

2.修改seata-server配置文件

 下载并解压好后,看到以下文件夹,并添加 logs 文件夹,用来存放seata-server日志

进入 conf 文件夹

修改日志文件:将以下地方修改刚才的日志文件夹即可

修改seata配置文件:registry.conf

  1. registry {
  2. # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  3. type = "nacos"
  4. nacos {
  5. application = "seata-server"
  6. serverAddr = "172.16.10.89:8848"
  7. namespace = "seata"
  8. group = "SEATA_GROUP"
  9. username = ""
  10. password = ""
  11. }
  12. }
  13. config {
  14. # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig
  15. type = "nacos"
  16. # 这里直接复制上的 nacos 即可,一般默认下面没有 application 这个项,要下上面的一样
  17. nacos {
  18. application = "seata-server"
  19. serverAddr = "172.16.10.89:8848"
  20. namespace = "seata"
  21. group = "SEATA_GROUP"
  22. username = ""
  23. password = ""
  24. }
  25. }

删除多余的配置,这里使用 nacos 其它的不需要。

注意:type:要改成 nacos

关于:file.conf 文件,由于采用了 naocs 则,file.conf 配置文件则不用管,其实就是把 type 改成 file

3.在 nacos 中添加配置文件及事务组

在nacos 中添加配置,这里不采用官网的方式,需要执行 .sh 文件来存入,那样的方式会产生一大堆配置文件(看得眼花)

Data ID: seata-server    要与上面配置中的 application 一样

Group: SEATA_GROUP 要与上面配置一样

要注意:namespace 也要一样

配置内容:

  1. transport.type=TCP
  2. transport.server=NIO
  3. transport.heartbeat=true
  4. transport.enableClientBatchSendRequest=false
  5. transport.threadFactory.bossThreadPrefix=NettyBoss
  6. transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
  7. transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
  8. transport.threadFactory.shareBossWorker=false
  9. transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
  10. transport.threadFactory.clientSelectorThreadSize=1
  11. transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
  12. transport.threadFactory.bossThreadSize=1
  13. transport.threadFactory.workerThreadSize=default
  14. transport.shutdown.wait=3
  15. # 分组事务定义
  16. service.vgroupMapping.my_test_tx_group=default
  17. # seata 地址
  18. service.default.grouplist=172.16.2.111:8091
  19. service.enableDegrade=false
  20. service.disableGlobalTransaction=false
  21. client.rm.asyncCommitBufferLimit=10000
  22. client.rm.lock.retryInterval=10
  23. client.rm.lock.retryTimes=30
  24. client.rm.lock.retryPolicyBranchRollbackOnConflict=true
  25. client.rm.reportRetryCount=5
  26. client.rm.tableMetaCheckEnable=false
  27. client.rm.sqlParserType=druid
  28. client.rm.reportSuccessEnable=false
  29. client.rm.sagaBranchRegisterEnable=false
  30. client.tm.commitRetryCount=5
  31. client.tm.rollbackRetryCount=5
  32. client.tm.defaultGlobalTransactionTimeout=60000
  33. client.tm.degradeCheck=false
  34. client.tm.degradeCheckAllowTimes=10
  35. client.tm.degradeCheckPeriod=2000
  36. # 配置类型: db file
  37. store.mode=db
  38. #store.file.dir=file_store/data
  39. #store.file.maxBranchSessionSize=16384
  40. #store.file.maxGlobalSessionSize=512
  41. #store.file.fileWriteBufferCacheSize=16384
  42. #store.file.flushDiskMode=async
  43. #store.file.sessionReloadReadSize=100
  44. # 数据库配置 - start
  45. store.db.datasource=druid
  46. store.db.dbType=mysql
  47. store.db.driverClassName=com.mysql.jdbc.Driver
  48. store.db.url=jdbc:mysql://172.16.10.89:3306/seata?useUnicode=true
  49. store.db.user=seata
  50. store.db.password=nova2020
  51. store.db.minConn=5
  52. store.db.maxConn=30
  53. store.db.globalTable=global_table
  54. store.db.branchTable=branch_table
  55. store.db.queryLimit=100
  56. store.db.lockTable=lock_table
  57. store.db.maxWait=5000
  58. # 数据库配置 - end
  59. # redis 配置
  60. #store.redis.host=127.0.0.1
  61. #store.redis.port=6379
  62. #store.redis.maxConn=10
  63. #store.redis.minConn=1
  64. #store.redis.database=0
  65. #store.redis.password=null
  66. #store.redis.queryLimit=100
  67. server.recovery.committingRetryPeriod=1000
  68. server.recovery.asynCommittingRetryPeriod=1000
  69. server.recovery.rollbackingRetryPeriod=1000
  70. server.recovery.timeoutRetryPeriod=1000
  71. server.maxCommitRetryTimeout=-1
  72. server.maxRollbackRetryTimeout=-1
  73. server.rollbackRetryTimeoutUnlockEnable=false
  74. client.undo.dataValidation=true
  75. client.undo.logSerialization=jackson
  76. client.undo.onlyCareUpdateColumns=true
  77. server.undo.logSaveDays=7
  78. server.undo.logDeletePeriod=86400000
  79. client.undo.logTable=undo_log
  80. log.exceptionRate=100
  81. transport.serialization=seata
  82. transport.compressor=none
  83. metrics.enabled=false
  84. metrics.registryType=compact
  85. metrics.exporterList=prometheus
  86. metrics.exporterPrometheusPort=9898

 配置需要修改地方:

分组事务定义:只能修改service.vgroupMapping.后面的数据,必须以这个为前缀。

seata地址

store.mode: 要改为 db,这里使用 mysql,然后修改对应的 store.db 相关内容

4.添加seata-server数据库

创建在上的配置的数据库:seata

添加表:

  1. CREATE TABLE `branch_table` (
  2. `branch_id` bigint(20) NOT NULL,
  3. `xid` varchar(128) NOT NULL,
  4. `transaction_id` bigint(20) DEFAULT NULL,
  5. `resource_group_id` varchar(32) DEFAULT NULL,
  6. `resource_id` varchar(256) DEFAULT NULL,
  7. `lock_key` varchar(128) DEFAULT NULL,
  8. `branch_type` varchar(8) DEFAULT NULL,
  9. `status` tinyint(4) DEFAULT NULL,
  10. `client_id` varchar(64) DEFAULT NULL,
  11. `application_data` varchar(2000) DEFAULT NULL,
  12. `gmt_create` datetime DEFAULT NULL,
  13. `gmt_modified` datetime DEFAULT NULL,
  14. PRIMARY KEY (`branch_id`),
  15. KEY `idx_xid` (`xid`)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  17. # -----------------------
  18. CREATE TABLE `global_table` (
  19. `xid` varchar(128) NOT NULL,
  20. `transaction_id` bigint(20) DEFAULT NULL,
  21. `status` tinyint(4) NOT NULL,
  22. `application_id` varchar(64) DEFAULT NULL,
  23. `transaction_service_group` varchar(64) DEFAULT NULL,
  24. `transaction_name` varchar(64) DEFAULT NULL,
  25. `timeout` int(11) DEFAULT NULL,
  26. `begin_time` bigint(20) DEFAULT NULL,
  27. `application_data` varchar(2000) DEFAULT NULL,
  28. `gmt_create` datetime DEFAULT NULL,
  29. `gmt_modified` datetime DEFAULT NULL,
  30. PRIMARY KEY (`xid`),
  31. KEY `idx_gmt_modified_status` (`gmt_modified`,`status`),
  32. KEY `idx_transaction_id` (`transaction_id`)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  34. #------------------------
  35. CREATE TABLE `lock_table` (
  36. `row_key` varchar(128) NOT NULL,
  37. `xid` varchar(96) DEFAULT NULL,
  38. `transaction_id` mediumtext,
  39. `branch_id` mediumtext,
  40. `resource_id` varchar(256) DEFAULT NULL,
  41. `table_name` varchar(32) DEFAULT NULL,
  42. `pk` varchar(32) DEFAULT NULL,
  43. `gmt_create` datetime DEFAULT NULL,
  44. `gmt_modified` datetime DEFAULT NULL,
  45. PRIMARY KEY (`row_key`)
  46. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

5.启动seata-server

至此seata-server 端配置完成

进入seata的bin文件夹,windows 使用 seata-server.bat 进行启动

进入 nacos 看下启动成功与否

二、配置客户端

1.springcloudalibaba+nacos+dubbo整合

      这里就不讲述这这个的整合的,百度一大把

2.添加 seata maven 依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
  4. </dependency>

3.配置seata及setata事务组

在启动配置中的添加事务分组和seata的启动配置:如上图所示,进入 bootstrap.yml 中

注: 是在 cloud 下与nacos平齐,alibaba.seata.tx-service-group 要与在nacos配置 seata-server  中定义的事务一样,否则会报 ip:port 异常

  1. server:
  2. port: 10013
  3. spring:
  4. application:
  5. name: alibaba_provider_class_seata
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 172.16.10.89:8848
  10. config:
  11. server-addr: 172.16.10.89:8848
  12. file-extension: yaml
  13. # seata 事务组配置
  14. alibaba:
  15. seata:
  16. # 自定义组名称,需要与seata-server中配置的对应
  17. tx-service-group: my_test_tx_group
  18. # seata 配置
  19. seata:
  20. registry:
  21. type: nacos
  22. nacos:
  23. application: seata-server
  24. server-addr: 172.16.10.150:8848
  25. group : "SEATA_GROUP"
  26. namespace: "seata"
  27. username: ""
  28. password: ""
  29. config:
  30. type: nacos
  31. nacos:
  32. application: seata-server
  33. server-addr: 172.16.10.150:8848
  34. group: "SEATA_GROUP"
  35. namespace: "seata"
  36. username: ""
  37. password: ""

4.为各自己的微服务的数据库添加表

添加一张:

  1. CREATE TABLE `undo_log` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `branch_id` bigint(20) NOT NULL,
  4. `xid` varchar(100) NOT NULL,
  5. `context` varchar(128) NOT NULL,
  6. `rollback_info` longblob NOT NULL,
  7. `log_status` int(11) NOT NULL,
  8. `log_created` datetime NOT NULL,
  9. `log_modified` datetime NOT NULL,
  10. `ext` varchar(100) DEFAULT NULL,
  11. PRIMARY KEY (`id`),
  12. UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

表说明:这里采用一个 mysql 数据库,但采用不同的数据源

seata数据库: 为 seata-server 的数据库,是步骤安装 seata-server 创建的数据库

seate_class: 是班级微服务的数据库

seate_teacher: 是老师微服务的数据库

注:seate_class 与 seate_teacher 是建库打错字了,本想打 seata 的,表呢也分得不合理,只是为了测试 seata 而弄的。

       seate_class 与 seate_teacher 中都有一张 undo_log 表。

5.使用注解

在项目中需要全局事务的文法中使用:@GlobalTransactional(timeoutMills = 300000, name = "dubbo-gts-seata-example")

示例:以下示例为测试代码,ClassService  下 TeacherService 是不同的微服务,各自使用各自的数据库

  1. // dubbo 注入业务处理
  2. @DubboReference
  3. ClassService classService;
  4. @DubboReference
  5. TeacherService teacherService;
  6. // 添加班级
  7. @RequestMapping("insertClass")
  8. // 开启全局事务
  9. @GlobalTransactional(timeoutMills = 300000, name = "dubbo-gts-seata-example")
  10. public ResultBase insertClass(@RequestBody ClassParam param)throws CustomException {
  11. // 业务逻辑
  12. classService.insertClass(param);// 添加班级
  13. //班级与老师
  14. TTeacherClass tc = new TTeacherClass();
  15. tc.setType(0);
  16. tc.setTeacherId(param.getTeacherId());
  17. tc.setClassId(1);
  18. //添加老师与班级的关系
  19. teacherService.insertThacherClass(tc);
  20. return ResultUtil.getBase();
  21. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/165660
推荐阅读
相关标签
  

闽ICP备14008679号