关键词:
1.4.2 Seata以nacos作为注册中心的配置和使用
1. 下载Seata 1.4.2
(1). 解压Seata 1.4.2
(2). Seata目录如下
(3). 下载Seata Source Code
(4). 解压后找到Script目录
这个目录下的内容在配置Seata的时候需要用到
2. 配置seata
(1). 创建相关数据库和表
默认情况下, seata的存储方式是文件, 我们改为以数据库的方式存储, 这里可以不改, 看需求
建表语句
建表语句 Seata Source Code的Script目录下的server / db 里
以mysql为例
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`status` TINYINT NOT NULL,
`application_id` VARCHAR(32),
`transaction_service_group` VARCHAR(32),
`transaction_name` VARCHAR(128),
`timeout` INT,
`begin_time` BIGINT,
`application_data` VARCHAR(2000),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT NULL,
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`resource_group_id` VARCHAR(32),
`resource_id` VARCHAR(256),
`branch_type` VARCHAR(8),
`status` TINYINT,
`client_id` VARCHAR(64),
`application_data` VARCHAR(2000),
`gmt_create` DATETIME(6),
`gmt_modified` DATETIME(6),
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(128),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
我在名为seata的数据库建立了表
(2). 修改file.conf文件
进入seata目录, 进入config目录
注意: 进入的是seata的目录, 不是Source Code
(3). 修改registry.conf文件
跟file.conf在同一个目录下
修改 type = “nacos”
还是这个文件找到最下面, 修改config
- 这里namespace没有配置, 默认情况下就在public下, 如果想改, 可以自己修改, 我以最简单的方式配置
(4). 把配置上传到nacos
打开Seata Source Code文件夹, 找到config-center, 进入, 打开context.txt
在context.txt文件中修改seata配置
其他不用修改, 留意一下这个
把context.txt文件中的内容上传到nacos
提前启动nacos
进入nacos目录
不双击打开
打开git bash
sh nacos-config.sh -h 127.0.0.1 -p 8848 -u nacos -w nacos
-h 是 host, 是你的nacos的ip地址, 本地就用 127.0.0.1
-p 是nacos的端口号 8848
-u 是 username 即用户名 默认都是nacos
-w 是 password 即密码 默认也是nacos
运行
运行完成
到这里就完成了配置上传nacos
3. 启动seata
默认情况下
用jdk1.8直接可以启动seata
其他版本的博主没有试过
- 进入bin目录
- 双击.bat文件即可
1. jdk8启动
直接双击.bat文件即可
启动成功
2. jdk17启动
- 编辑.bat文件, 用记事本打开
- 修改 %JAVACMD%
将原来的替换为
%JAVACMD% %JAVA_OPTS% -server --add-opens=java.base/java.lang=ALL-UNNAMED -Xmx2048m -Xms2048m -Xmn1024m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%BASEDIR%"/logs/java_heapdump.hprof -XX:+DisableExplicitGC -Xlog:gc:"%BASEDIR%"/logs/seata_gc.log -verbose:gc -Dio.netty.leakDetectionLevel=advanced -Dlogback.color.disable-for-bat=true -classpath %CLASSPATH% -Dapp.name="seata-server" -Dapp.repo="%REPO%" -Dapp.home="%BASEDIR%" -Dbasedir="%BASEDIR%" io.seata.server.Server %CMD_LINE_ARGS%
- 双击启动
3. 闪退问题
如果出现闪退, 可能是jdk版本不对, 检查一下jdk版本, jdk17启动要改配置
4. 其他配置
见下面的测试
4. 测试seata
- 订单服务
- 库存服务
- 订单服务通过open-feign调用库存服务
- 在订单服务抛出异常, 检查能不能进行回滚操作
1. 版本
父工程pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<artifactId>seata-sample</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spring.boot.version>2.6.6</spring.boot.version>
<spring.framework.version>5.3.18</spring.framework.version>
<spring.cloud.version>2021.0.2-SNAPSHOT</spring.cloud.version>
<spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
<spring.data.version>2021.0.2-SNAPSHOT</spring.data.version>
</properties>
<dependencyManagement>
<!-- Spring Boot-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>$spring.boot.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>$spring.framework.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring.cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>$spring.cloud.alibaba.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Data-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-bom</artifactId>
<version>$spring.data.version</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>spring-milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>spring-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>$spring.boot.version</version>
</plugin>
</plugins>
</build>
</project>
2. 总体目录
-
目录
-
子工程依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>seata-sample</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>seata-stock</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos注册中心服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
</project>
3. 配置
(1). application.properties配置
在每一个服务中, 对配置seata所需要的信息
订单服务的配置
server.port=8002springcloudalibabaseata分布式事务使用快速入门,nacos做seata的注册中心和配置中心
SpringCloudSeata分布式事务使用快速入门特点1、文档教程详细且提供完整源码及数据库脚本2、有配套全手敲代码的视频演示教程使用版本SpringCloudAlibaba2021.1Nacos1.4.1Seata1.3.0概念说明:本地事务及分布式事务本地事务1、在一个进... 查看详情
springcloudalibabaseata分布式事务使用快速入门,nacos做seata的注册中心和配置中心(代码片段)
SpringCloudSeata分布式事务使用快速入门特点1、文档教程详细且提供完整源码及数据库脚本2、有配套全手敲代码的视频演示教程使用版本SpringCloudAlibaba2021.1Nacos1.4.1Seata1.3.0概念说明:本地事务及分布式事务本地事务1、在一个进... 查看详情
nacos简介以及作为注册/配置中心与eurekaapollo的选型比较
nacos简介以及作为注册/配置中心与Eureka、apollo的选型比较12019.07.1212:45:02字数1394阅读3983一、Nacos简介Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。Nacos主要提供以下四大功能:服务发现与服... 查看详情
nacos简介以及作为注册/配置中心与eurekaapollo的选型比较
一、Nacos简介Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos... 查看详情
seata配置中心实现原理(代码片段)
...:file.conf是默认的配置属性,registry.conf主要存储第三方注册中心与配置中心的信息,主要有两大块:registry#file、nacos、eureka、redis、zk、consul、etcd3、sofa#...config#file、nacos、apollo、zk、consul、etcd3type="file"nacosserverAddr="loc... 查看详情
分布式事务:springboot+dubbo+seata+nacos实现案例
...acos1.3.2+Seata1.3.0整合来实现Dubbo分布式事务管理,使用Nacos作为Dubbo和Seata的注册中心和配置中心,使用MySQL数据库和MyBatis来操作数据库。案例说明项目包含四个模块,consumer模块依赖其他三个模块。 示例采用TCC模式与AT模式混合... 查看详情
springcloudalibabanacos服务注册和配置中心(代码片段)
...ingCloudAlibabaNacos服务注册和配置中心一、Nacos概述二、Nacos作为注册中心2.1基于Nacos的服务提供者2.2基于Nacos的服务消费者2.3Nacos与其他注册中心对比三、Nacos作为配置中心3.1Nacos基础配置3.2Nacos分类配置3.2.1Nacos的命名规则说明3.2.2Dat... 查看详情
springcloudalibaba——nacos服务注册与配置中心(一作为服务注册中心)
...。在之前学习SpringCloudH版的时候,一般来说是用Eureka作为服务注册中心,Config+Bus来进行服务 查看详情
springcloudalibaba——nacos服务注册与配置中心(一作为服务注册中心)
...。在之前学习SpringCloudH版的时候,一般来说是用Eureka作为服务注册中心,Config+Bus来进行服务 查看详情
springcloud第二季之nacos,sentinel,seata以及雪花算法学习笔记(代码片段)
...libaba简介96.Nacos简介和下载97.Nacos安装98.Nacos之服务提供者注册99.Nacos之服务消费者注册和负载100.Nacos服务注册中心对比提升101.Nacos之服务配置中心102.Nacos之命名空间分组和DataID三者关系103.Nacos之DataID配置104.Nacos之Group分组方案105.N... 查看详情
springcloudalibaba——nacos服务注册与配置中心(二作为服务配置中心)
...。在之前学习SpringCloudH版的时候,一般来说是用Eureka作为服务注册中心,Config+Bus来进行服务 查看详情
springcloudalibaba——nacos服务注册与配置中心(二作为服务配置中心)
...。在之前学习SpringCloudH版的时候,一般来说是用Eureka作为服务注册中心,Config+Bus来进行服务 查看详情
springcloudalibaba微服务组件seata分布式事务
文章目录1.启动SeataServer1.1环境准备1)指定nacos作为配置中心和注册中心2)同步seataserver的配置到nacos3)启动SeataServer2.Seata如何整合到SpringCloud微服务2.1导入依赖2.2微服务对应数据库中添加undo_log表2.3微服务需要使用seat... 查看详情
consule作为注册中心配置实例
...一篇<<<Eureka的自我保护机制下一篇>>>Zookeeper作为注册中心配置实例推荐阅读:<<<服务注册、服务发现和服务治理<<<服务治理的方式和原理<<<Nacos的服务手动注册与发现<<<Nacos整合到SpringCloud... 查看详情
springcloud整合alibaba和seata实现高性能的微服务分布式事务
...优秀的分布式解决方案,如Nacos、Dubbo、RocketMQ等,而Seata作为阿里巴巴开源的一款分布式事务解决方案,可以帮助我们解决微服务架构中的分布式事务问题。本文将介绍如何使用SpringCloud整合Alibaba和Seata,实现高性能的微服务分... 查看详情
nacos:服务注册及配置中心(代码片段)
...配置中心和服务管理平台。在SpringCloudAlibaba中常使用Nacos作为注册中心和分布式配置中心。Nacos官网地址:https://nacos.io/en-us/Nacosgithub地址:https://git 查看详情
springcloud整合alibaba的nacos实现服务注册和配置中心
...注册与发现和配置中心:服务注册与发现:NacosServer可以作为服务注册中心,实现服务注册与发现的功能。配置中心:NacosConfig可以作为配置中心,实现动态配置服务提供者和消费者的参数。同时,SpringCloud也提供了相应的组件来... 查看详情
微服务架构|*3.5nacos服务注册与发现的源码分析(代码片段)
*3.5Nacos服务注册与发现的源码分析前言1.客户端注册进Nacos注册中心(客户端视角)1.1SpringCloud提供的规范标准1.2Nacos的自动配置类1.3监听服务初始化事件AbstractAutoServiceRegistration.bind()1.4注册服务实例的逻辑NacosServiceRegistry.r... 查看详情