Seata 整合 Nacos 2.x
nacos
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
项目地址:https://gitcode.com/gh_mirrors/na/nacos
免费下载资源
·
序言
Seata 服务器与传统服务器的使用方式不太一样,首先 Seata 服务器端先向注册中心(可以是 Nacos、Eureka、Etcd3、Consul、Zookeeper 等注册中心)注册。注册成功之后,客户端采用相同的配置去注册中心寻找 Seata 服务,从而实现 Java 客户端连接 Seata 服务器端。这与微服务注册服务拉取服务的思维方式相同。
一、配置 Seata-Server
-
下载 seata-server-2.0.0 并解压到一个指定位置
-
进入
seata/script/config-center
目录找到 config.txt 文件配置 nacos 的脚本#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional. # 因为我们使用的是数据库的方式,所以这里要改成 db store.mode=db store.lock.mode=file store.session.mode=file #Used for password encryption store.publicKey= #These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block. store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.jdbc.Driver store.db.url=jdbc:mysql://localhost:3306/seata?useUnicode=true&rewriteBatchedStatements=true store.db.user=username store.db.password=password store.db.minConn=5 store.db.maxConn=30 store.db.globalTable=global_table store.db.branchTable=branch_table store.db.distributedLockTable=distributed_lock store.db.queryLimit=100 store.db.lockTable=lock_table store.db.maxWait=5000 #Transaction routing rules configuration, only for the client # 这行很重要影响到客户端,如果不知道就是用默认配置 service.vgroupMapping.default_tx_group=default
-
创建对应的数据库,可根据自身情况进行选择
-
进入
seata/script/server/db
找到对应的数据库脚本,初始化数据库 -
进入
seata/conf
目录找到 application.yml 文件,进行如下配置seata: config: # support: nacos, consul, apollo, zk, etcd3 type: nacos nacos: server-addr: 127.0.0.1:8848 # 该命令空间,是 Nacos 注册中心已经存在的哟 namespace: 28d63531-feeb-4692-8b5e-f2b2d684b9e3 group: SEATA_GROUP username: nacos password: nacos 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 # 该命令空间,是 Nacos 注册中心已经存在的哟 namespace: 28d63531-feeb-4692-8b5e-f2b2d684b9e3 cluster: default username: nacos password: nacos
-
确保 Nacos 服务器已经启动,然后进入
seata/script/config-center/nacos
目录执行以下脚本(该脚本是向 nacos 配置中心注册 seata 所需的一些配置)# 如果使用的是 linux 直接执行即可,如果使用的是 windows ,可使用 git-bash 终端执行该命令 # -h nacos ip 主机 # -p nacos 所在端口 # -g group 与上面配置保持一致 # -t namespace 与上面配置保持一致 sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t ded91f4b-04df-4c19-8006-755505a27c5e # 如果 windows 中安装了 python 也可使用 python 代替 bash 命令
-
进入
seata/bin
目录找到对应的操作系统脚本执行,运行 seata 服务器(在这之前需保证 nacos 服务器已经启动)# windows 操作系统 ./seata-server.bat # linux 操作系统 sh seata-server.sh
二、配置 Seata-Java 客户端
-
引入对应依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.6</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.5.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--seata starter--> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!--dubbo starter--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.2.10</version> </dependency> <!--注册中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
-
application.yml 配置文件配置对应信息
# 微服务&注册中心&配置中心 spring: application: # 获取 pom 文件中的项目名称 name: @project.artifactId@ cloud: nacos: discovery: server-addr: 127.0.0.1:8848 password: nacos username: nacos config: server-addr: ${spring.cloud.nacos.discovery.server-addr} config: import: - optional:nacos:test.yml # 服务器端口配置 server: port: 8081 # dubbo 配置 dubbo: application: name: @project.artifactId@ qos-enable: true qos-port: 3333 protocol: name: dubbo port: -1 registry: address: nacos://localhost:8848 use-as-metadata-center: false use-as-config-center: false # seata 配置 # 以下配置一个都不能少,可以先完全按照这个配置来,之后测试没问题之后可根据需求增删 seata: # 在 seata/script/config-center/config.txt 文件中有一个 # service.vgroupMapping.default_tx_group=default 配置,需要和此处保持一致 tx-service-group: default_tx_group service: vgroup-mapping: default_tx_group: SH registry: type: nacos nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} # 命令空间需要与之前的服务器端,以及 nacos 的命令空间三者保持一致 namespace: 28d63531-feeb-4692-8b5e-f2b2d684b9e3 # 注册到注册中心的微服务名称 application: seata-server group: SEATA_GROUP # 如果 nacos 不存在用户密码,可以没有下面两项配置 username: nacos password: nacos config: type: nacos nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} namespace: ${seata.registry.nacos.namespace} group: SEATA_GROUP disable-global-transaction: false client: rm: report-success-enable: true
-
seata 客户端默认采用的是 AT 模式,需要在对应的数据库初始化
undo_log
表,详见CREATE TABLE `undo_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `branch_id` bigint(20) NOT NULL, `xid` varchar(100) NOT NULL, `context` varchar(128) NOT NULL, `rollback_info` longblob NOT NULL, `log_status` int(11) NOT NULL, `log_created` datetime NOT NULL, `log_modified` datetime NOT NULL, `ext` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
如果存在多个微服务,每个微服务所使用的数据库都需要有 undo_log 表
三、使用案例
/**
* 以下示例需要对应的服务以及数据库都配置好才行哟
*/
@Service
public class OrderServiceImpl implements OrderService {
// 引入下游服务
@DubboReference
private UserService userService;
@Resource
private OrderMapper orderMapper;
@Override
// 使用该注解开启全局事务
@GlobalTransactional(rollbackFor = Exception.class)
public void addOrder() {
// 添加订单
orderMapper.save(order);
// 查询用户
userService.queryOne();
}
}
四、FAQ
- seata 有多种模式,默认 AT 模式,如需使用相应模式,请参考官网各模式的使用案例
- seata 服务端与客户端的配置请先完全按照上述的配置内容来。当启动测试都无误后,可自行根据需求进行增删配置,以免发生不可预测的问题
- 限于篇幅,上面有些配置项如果不太清楚,可以寻求搜索引擎的帮助去了解哦
GitHub 加速计划 / na / nacos
29.81 K
12.74 K
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:1 个月前 )
3a9003bc
11 天前
963b221f
11 天前
更多推荐
已为社区贡献1条内容
所有评论(0)