SpringCloud 整合分布式事务组件 Seata (八)

第三步,修改下 \seata-1.4.1\seata-server-1.4.1\seata\conf 里的配置文件一些信息 :

1. registry.conf

ok,registry.conf 这文件就修改这些配置项。

2. file.conf :

以上两个文件配置完(记得保存), 我们先把我们的注册中心 eureka服务跑起来,然后点击启动 seata server:

可以看到启动成功(前提是eureka已经启动):

第三步 ,配置我们需要用到 分布式事务 seata组件的 微服务 :

我这里的示例实践,需要用到的有2个微服务 :

那么我们这两个微服务都需要做点什么呢?

1. 在对应的微服务的对应的不同数据库里(只要你想用上seata的), 都加上undo_log 这个表:

SQL语句:

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;


– Table structure for undo_log


DROP TABLE IF EXISTS undo_log;

CREATE TABLE undo_log (

id bigint(20) NOT NULL AUTO_INCREMENT,

branch_id bigint(20) NOT NULL,

xid varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

context varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

rollback_info longblob NOT NULL,

log_status int(11) NOT NULL,

log_created datetime(0) NULL,

log_modified datetime(0) NULL,

PRIMARY KEY (id) USING BTREE,

UNIQUE INDEX ux_undo_log(xid, branch_id) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2. 关键步骤了 , 导入jar包 (需要用到seata组件都服务都需要导入)

com.alibaba.cloud

spring-cloud-alibaba-seata

2.1.0.RELEASE

seata-all

io.seata

seata-all

io.seata

1.4.1

3.更加关键了,就是做配置

先总得了解下,需要用到seata的 微服务需要做些什么配置 ?

1. 在resources 下 新增2个配置文件 , file.conf  和   registry.conf

2.yml 新增配置seata 事务组参数

3.代码调整数据源代理,交给seata代理

1.   registry.conf

以上是业务微服务里的registry.conf  需要改动的配置信息 ,给出一份该篇文章使用的:

registry {

file 、nacos 、eureka、redis、zk、consul、etcd3、sofa

type = “eureka”

loadBalance = “RandomLoadBalance”

loadBalanceVirtualNodes = 10

nacos {

application = “seata-server”

serverAddr = “127.0.0.1:8848”

group = “SEATA_GROUP”

namespace = “”

cluster = “default”

username = “”

password = “”

}

eureka {

serviceUrl = “http://localhost:8761/eureka/”

application = “seata-server”

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 = “http://localhost:2379”

}

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 = “file”

nacos {

serverAddr = “127.0.0.1:8848”

namespace = “”

group = “SEATA_GROUP”

username = “”

password = “”

}

consul {

serverAddr = “127.0.0.1:8500”

}

apollo {

appId = “seata-server”

apolloMeta = “http://192.168.1.204:8801”

namespace = “application”

apolloAccesskeySecret = “”

}

zk {

serverAddr = “127.0.0.1:2181”

sessionTimeout = 6000

connectTimeout = 2000

username = “”

password = “”

}

etcd3 {

serverAddr = “http://localhost:2379”

}

file {

name = “file.conf”

}

}

file.conf

给出一份该篇使用的完整的:

transport {

tcp udt unix-domain-socket

type = “TCP”

#NIO NATIVE

server = “NIO”

#enable heartbeat

heartbeat = true

the client batch send request enable

enableClientBatchSendRequest = true

#thread factory for netty

threadFactory {

bossThreadPrefix = “NettyBoss”

workerThreadPrefix = “NettyServerNIOWorker”

serverExecutorThread-prefix = “NettyServerBizHandler”

shareBossWorker = false

clientSelectorThreadPrefix = “NettyClientSelector”

clientSelectorThreadSize = 1

clientWorkerThreadPrefix = “NettyClientWorkerThread”

netty boss thread size,will not be used for UDT

bossThreadSize = 1

#auto default pin or 8

workerThreadSize = “default”

}

shutdown {

when destroy server, wait seconds

wait = 3

}

serialization = “seata”

compressor = “none”

}

service {

#这里注意,等号前后都是配置,前面是yml里配置的事务组,后面是register.conf里定义的seata-server

vgroupMapping.test_tx_group = “seata-server”

#only support when registry.type=file, please don’t set multiple addresses

seata_tc_server.grouplist = “127.0.0.1:8091”

#degrade, current not support

enableDegrade = false

#disable seata

disableGlobalTransaction = false

}

client {

rm {

asyncCommitBufferLimit = 10000

lock {

retryInterval = 10

retryTimes = 30

retryPolicyBranchRollbackOnConflict = true

}

reportRetryCount = 5

tableMetaCheckEnable = false

reportSuccessEnable = false

}

tm {

commitRetryCount = 5

rollbackRetryCount = 5

}

undo {

dataValidation = true

logSerialization = “jackson”

logTable = “undo_log”

}

log {

exceptionRate = 100

}

}

2. 需要在yml配置文件加上配置项,指明当前服务使用了 seata分布式事务组件,且需要加入的分布式事务组是哪个:

spring:

cloud:

alibaba:

seata.tx-service-group: test_tx_group

3.然后是需要将数据源交给seata去代理:

去掉默认自动加载数据源

配置dao层扫描位置

@MapperScan(“com.cloud.client1.dao”)

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

然后是seata代理数据源(红色标注的地方需要注意下,都是实打实踩出来的坑。导入类的来源以及扫描的mapper的xml位置):

ok,到这里一个微服务 usercent的 整合 seata 分布式组件算是完成了。

同样,我们继续对 另外一个微服务 coredata 做seata 分布式组件  整合 。

也是第一步,file.conf 和 registry.conf  (其实我们现在就是让这两个微服务在同一个分布式事务组,我们直接把刚才在usercent那边的两个文件直接粘贴过来就好)。

然后第二步就是修改yml配置:

第三步就是新增seata数据源代理、application上的注解排除自动加载数据源和扫描dao层地址,yml上面的配置项:

完事,两个业务微服务都整合了 分布式事务组件 seata ,而且都设置在同个分布式事务组里 (test_tx_group).

那么到这其实已经完事了, 接下来玩下 分布式事务回滚场景 的例子 (怎么去使用)。

PS: 使用方式关注 @GlobalTransactional  注解, 想把全局事务从哪里开启,就把这个注解放到哪个方法上去, 这个方法内 调用的其他服务只要都使用了seata,且在同个事务组,那么就会加入到当前的全局事务里。

我该篇就不弄太多服务了,就弄了2个分布式服务。

展示的例子内容 :

1. 上游服务 出错, 触发分布式事务, 上下游服务都会事务回滚;

2.下游服务 出错,触发分布式事务, 上下游服务都会事务回滚;(某种程度上讲,下游出错如果只有一个下游,其实不需分布式事务,通过错误传递单个回滚也是可以的。但是如果服务调用链很长,中游服务出错,需要整个链上的服务都事务回滚,那么就有必要都使用seata )

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

部分内容:

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

[外链图片转存中…(img-mOsO3tob-1714467487658)]

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

[外链图片转存中…(img-PFYhCDsg-1714467487659)]

部分内容:

[外链图片转存中…(img-IpCzD2qk-1714467487659)]

[外链图片转存中…(img-bVpEGDn1-1714467487659)]

[外链图片转存中…(img-iNAxWKGQ-1714467487660)]

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值