第三步,修改下 \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页,需要的话可以点赞+关注