seata分布式事务官方入门案例导读1(实战版)
seata分布式事务官方入门案例导读2(实战版)
1、启动mysql
docker start mysql_mall_learning
2、启动nacos
备注:如果没有设置db存储请自行设置db存储,下面是作者本地配置好的nacos持久化环境,所以直接启动了
/Users/apple/Documents/Work/InstallationSoftware/nacos/bin/startup.sh
3、启动seata
参考资料:https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/user-guide/seata/quick-start
如果是第一次配置seata的压缩包,参考附录3.1
如果不是第一次配置,请直接启动
下面是作者本地配置好的seata持久化和把seata注册到nacos的环境,所以直接启动了
/Users/apple/Documents/Work/seata-1.7.1/bin/seata-server.sh -h 127.0.0.1 -p 8091 -m db
1、首先在nacos中创建nacos配置。
注意注意:一定要创建group为SEATA_GROUP,详细配置内容是连接中的内容
service.vgroupMapping.order-service-tx-group=default
service.vgroupMapping.account-service-tx-group=default
service.vgroupMapping.business-service-tx-group=default
service.vgroupMapping.storage-service-tx-group=default
把以上配置加载seata.properties的末尾
2、代码启动
回到代码spring-cloud-alibaba-example/spring-cloud-alibaba-examples/seata-example/seata-server
,直接启动SeataServerApplication类,不出意外应该是没有报错的,作者亲试。
闲话:该模块其实啥都没有,只有一个SeataServerApplication类和一个application.yml配置文件,其实是使用了引入的seata-server.jar来启动的,且基于spring boot的配置文件覆盖规则,项目的application.yml覆盖了jar包中的application.yml。
在本示例中,我们模拟了一个用户购买货物的场景,StorageService 负责扣减库存数量,OrderService 负责保存订单,AccountService 负责扣减用户账户余额。
为了演示样例,我们在 OrderService 和 AccountService 中 使用 Random.nextBoolean() 的方式来随机抛出异常,模拟了在服务调用时随机发生异常的场景。
多次点击,小的概率会出现正常的调用,大部分为异常调用,请多点击几次。
如果分布式事务生效的话, 那么以下等式应该成立:
连接nacos把seata服务注册到nacos中,这里是用来注册seata的
连接db,把seata的数据存储在mysql中。
脚本在:script/server/db/mysql.sql位置
1、修改store.mode
启动包: seata–>conf–>application.yml,修改store.mode=“db或者redis”
2、修改数据库连接|redis属性配置
启动包: seata–>conf–>application.example.yml中附带额外配置,将其db|redis相关配置复制至application.yml,进行修改store.db或store.redis相关属性。
seata:
store:
# support: file 、 db 、 redis
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
user: root
password: root
min-conn: 10
max-conn: 100
global-table: global_table
branch-table: branch_table
lock-table: lock_table
distributed-lock-table: distributed_lock
query-limit: 1000
max-wait: 5000
从nacos中获取配置,以及把自己注册到nacos中
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace:
group: SEATA_GROUP
username: nacos
password: nacos
context-path:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key:
#secret-key:
data-id: seata.properties
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace:
cluster: default
username: nacos
password: nacos
context-path:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key:
#secret-key:
cd /Users/apple/Documents/Work/seata-1.7.1/bin
# 存储用file(仅仅用于本地测试)
seata-server.sh -h 127.0.0.1 -p 8091 -m db
问题1:作者碰到在nacos添加配置文件seata.properties的group选择默认组default_group而出现测试的几个微服务报错
更正:请不要用default_group而是用seata_group。