1. 概述
JPAAS是一个分布式的开发平台,因此很重要的一件事情就是需要解决分布式事务的问题,JPAAS采用了 SEATA作为平台的 分布式事务解决方案。seata 是阿里的自己在用的分布式事务解决方案,因此可靠性,性能都是毋庸置疑的。
2. 部署步骤
seata 是基于nacos作为配置和注册中心使用的,可以支持高可用,seata 的配置也是基于nacos的。
2.1 创建seata 的事务管理数据库
执行脚本:
2.2 导入seata配置
我们将seata的配置已经导出,只需要在nacos进行导入,导入seata的配置。
这里我们主要需要修改的是几个地方:
2.2.1 数据库的配置:
根据实际情况做相应的更改。
2.2.2 修改事务组(默认不用改)
这个事务组需要在nacos 做相应的配置。
这里需要名称保持一致。
2.2.3 支持MYSQL8
驱动类名修改为:
com.mysql.cj.jdbc.Driver
2.2.4 支持ORACLE
1.修改seata配置信息,数据库类型,数据库驱动,用户名,密码
2.执行oracle数据库环境的seata的数据库脚本
3.将oracle的连接驱动程序jar包复制到服务器当前目录下
2.3 修改 seata 服务的配置
编辑 registry.conf 配置
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "localhost:8848"
namespace = "public"
group = "DEFAULT_GROUP"
cluster = "default"
username = "nacos"
password = "nacos"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "localhost:8848"
namespace = ""
group = "SEATA_GROUP"
cluster = "default"
username = "nacos"
password = "nacos"
}
}
这里只需要修改 serverAddr 为 nacos 的地址。
2.4 启动SEATA 服务
配置好后,启动 seata server,如果没有报错,我们可以看到 seata server 在nacos中进行注册成功。
启动命令:
nohup ./seata-server.sh -p 8888 -h 192.168.1.10 &
2.5 SEATA 高可用
其实按照上面的配置好后,只需要 多启动几个 seata-server,这样 seata 的集群就搭建好了。
nohup ./seata-server.sh -p 8888 -h 192.168.1.10 -n 1 &
-n:Server node。在多个 TC Server 时,需区分各自节点,用于生成不同区间的 transactionId 事务编号,以免冲突。
2.6 程序配置
在新建项目时,我们可以这样配置 seata.
seata:
enabled: true
application-id: ${spring.application.name}
tx-service-group: bpm_tx_group
enable-auto-data-source-proxy: true
registry:
type: nacos
nacos:
application: seata-server
server-addr: ${nacos.address}
group: DEFAULT_GROUP
userName: nacos
password: nacos
config:
type: nacos
nacos:
namespace:
serverAddr: ${nacos.address}
group: SEATA_GROUP
cluster: default
userName: nacos
password: nacos
需要改动的地方为:
tx-service-group: bpm_tx_group,这个需要和 nacos 的配置改成一致。
service.vgroupMapping.bpm_tx_group=default
nacos.address配置指向之前配置的 nacos server。
2.7 升级到seata1.3
从 seata 1.2 升级到 1.3 的方法。
1.客户端只需要修改pom.xml 。
2.服务端替换成1.3。
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.2.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>1.3.0</version>
</dependency>