1.4.2seata以nacos作为注册中心的配置和使用(代码片段)

_DiMinisH _DiMinisH     2022-12-03     712

关键词:

1.4.2 Seata以nacos作为注册中心的配置和使用

1. 下载Seata 1.4.2

Seata下载连接

(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启动

  1. 编辑.bat文件, 用记事本打开
  2. 修改 %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%
  1. 双击启动

3. 闪退问题

如果出现闪退, 可能是jdk版本不对, 检查一下jdk版本, jdk17启动要改配置

4. 其他配置

见下面的测试

4. 测试seata

  1. 订单服务
  2. 库存服务
  3. 订单服务通过open-feign调用库存服务
  4. 在订单服务抛出异常, 检查能不能进行回滚操作

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. 总体目录

  1. 目录

  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... 查看详情