S e a t a 1.5.2 ——含各种踩坑记录 \color{#FF1493}{Seata1.5.2 —— 含各种踩坑记录} Seata1.5.2——含各种踩坑记录
仰望天空,妳我亦是行人.✨
个人主页——微风撞见云的博客
《数据结构与算法》专栏的文章图文并茂生动形象简单易学!欢迎大家来踩踩~
《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~
《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~
《Redis》专栏的文章是在学习Redis时,整理的笔记与记录的思考~
《RabbitMQ》专栏的文章是在学习尚硅谷课程时整理的笔记,方便复习巩固~
希望本文能够给读者带来一定的帮助~文章粗浅,敬请批评指正!
这是一期 踩坑日记,两个月前跟着尚硅谷周阳老师学微服务最后的seata部分,由于版本不同,配置不好,不想用0.9的老版本,1.5.2版本的和老版本配置问题差别太大,当时弄了很久也没有弄好,放弃了。昨天重拾问题,今早解决,完结撒花,特此记录本次seata 1.5.2 版本的各种踩坑日记。
这里啰嗦一句:在看视频的时候,发现弹幕的小伙伴基本上分为几个阵营:“0.9.x”、“1.4.x”、“1.5.2”,这三个版本的配置都有很大差异,尤其是1.5.2版本,配置文件直接改为了yml,并且不再需要手动配置 DataSourceProxy 我就是想尝试新一点的,所以没少踩坑 。大家谨慎选择版本。
官网地址:http://seata.io/zh-cn/
下载地址:https://github.com/seata/seata/releases
解压文件后,你将看到这样的目录:
修改seata\conf 下的 application.yml(建议先拷贝一份副本备用)
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: http://127.0.0.1:8848
# namespace: 7392baed-d98b-48a4-8676-34e1b38eade6
namespace:
group: SEATA_GROUP
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
data-id: seataServer.properties
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
preferred-networks: 30.240.*
nacos:
application: seata-server
server-addr: http://127.0.0.1:8848
group: SEATA_GROUP
namespace:
# namespace: 7392baed-d98b-48a4-8676-34e1b38eade6
cluster: default
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
点击左侧的:配置管理/配置列表,新增一个配置:
DataID: seataServer.properties
GROUP: SEATA_GROUP
配置内容
格式为:properties
内容为:
# 存储模式
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
# 需要根据mysql的版本调整driverClassName
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver
# 注意根据生产实际情况调整参数host和port
store.db.url=jdbc:mysql://127.0.0.1:3306/seata
# 数据库用户名密码
store.db.user=root
store.db.password=root
# 微服务里配置与这里一致
service.vgroupMapping.fsp_tx_group=default
service.vgroupMapping.fsp_tx_group=default
service.vgroupMapping.fsp_tx_group=default
找到 seata\script\server\db\mysql.sql 文件,在数据库新建一个seata数据库,执行这个文件
双击 seata\bin 下的 seata-server.bat,如果闪退 cmd 可以看报错内容
查看 Nacos
这里以 seata-order-service2001 服务为例,另外两个同理。
依赖一定要选对,高版本得用这个 ↓ 不然会报错:not support register type: null
<!--seata-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.5.2</version>
</dependency>
按照这个写基本上就OK
server:
port: 2001
spring:
application:
name: seata-order-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/seata_order?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
feign:
hystrix:
enabled: false
logging:
level:
io:
seata: info
mybatis:
mapperLocations: classpath:mapper/*.xml
seata:
tx-service-group: fsp_tx_group #这里每个服务都是对应不同的映射名,在配置中心可以看到
registry:
type: nacos
nacos:
server-addr: localhost:8848
group: SEATA_GROUP
service:
vgroup-mapping:
#这里也要注意 key为映射名,
fsp_tx_group: default
这里有个大坑,老师是旧版本的,我们是新版本的,DruidDataSource 配置了反而出错,参考github解决了
报错:
Bean named ‘dataSourceProxy’ is expected to be of type ‘io.seata.rm.datasource.DataSourceProxy’ but was actually of type ‘com.alibaba.druid.pool.DruidDataSource E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIBd38bdd7b’ #3805
来自大佬的解释(真心感谢):自1.3以来不鼓励自己注册DataSourceProxy bean。如果您正在使用DataSourceProxy,则不需要关心DataSourceProxy(starter将自动处理它),只需以旧的方式注册并使用datasourcebean。
也就是说,在后续的高版本中,我们不要再去手动配置数据源了,就使用自动创建的数据源即可。
由于我的nacos是2.1.1,并且seata是1.5.2,工程父pom中的依赖不再适用。
详情请参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
启动, seata、nacos、三个微服务之后
访问:http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100
查看数据库中对应的数据(原始sql语句在老师的笔记中有,实在没有的话,你也可以参考这篇很棒的文章:Spring Cloud 学习笔记(3 / 3))
先正常访问,看看数据库情况:http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100
添加超时,OpenFeign 默认超时是1s,我们超时20秒,这样可以模拟一个服务异常的场景,观察数据库有无写操作
由于服务异常,操作回滚,数据全部OK!真 · 完结撒花!!!ヽ(°▽°)ノ ~~~
初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。
积少成多,滴水成河。文章粗浅,希望对大家有帮助!
参考文献: