Seata 整合 Nacos 2.x

序言

Seata 服务器与传统服务器的使用方式不太一样,首先 Seata 服务器端先向注册中心(可以是 Nacos、Eureka、Etcd3、Consul、Zookeeper 等注册中心)注册。注册成功之后,客户端采用相同的配置去注册中心寻找 Seata 服务,从而实现 Java 客户端连接 Seata 服务器端。这与微服务注册服务拉取服务的思维方式相同。

一、配置 Seata-Server

  1. 下载 seata-server-2.0.0 并解压到一个指定位置

  2. 进入 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
    
  3. 创建对应的数据库,可根据自身情况进行选择

  4. 进入 seata/script/server/db 找到对应的数据库脚本,初始化数据库

  5. 进入 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
    
  6. 确保 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 命令
    
  7. 进入 seata/bin 目录找到对应的操作系统脚本执行,运行 seata 服务器(在这之前需保证 nacos 服务器已经启动)

    # windows 操作系统
    ./seata-server.bat
    
    # linux 操作系统
    sh seata-server.sh
    

二、配置 Seata-Java 客户端

  1. 引入对应依赖

    <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>
    
  2. 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
    
  3. 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

  1. seata 有多种模式,默认 AT 模式,如需使用相应模式,请参考官网各模式的使用案例
  2. seata 服务端与客户端的配置请先完全按照上述的配置内容来。当启动测试都无误后,可自行根据需求进行增删配置,以免发生不可预测的问题
  3. 限于篇幅,上面有些配置项如果不太清楚,可以寻求搜索引擎的帮助去了解哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/555453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux服务器磁盘满了如何清理

生产环境中&#xff0c;磁盘很容易被日志文件沾满&#xff0c;如何查找和清理呢&#xff1f; 分享一下个人的经验&#xff1a; 1.先查询到哪个磁盘占用的最多 使用命令&#xff1a;df -h 2.查询/目录下磁盘占用情况 使用命令&#xff1a;du -sh * 3.同理进入占用磁盘比较大…

聊聊binlog是什么

1. 上一讲思考題解答:redo日志刷盘策略的选择建议 先给大家解释一下上一讲的思考題&#xff0c;我给大家的一个建议&#xff0c;其实对于redo日志的三种刷盘策略&#xff0c;我们通常建议是设置为1 也就是说&#xff0c;提交事务的时候&#xff0c;redo日志必须是刷入磁盘文件…

接口测试之用Fiddler对手机app进行抓包

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

基于FPGA的OMEGA东京奥运会计时器

截至2019年共举办了31届奥运会&#xff0c;其中27届的计时设备都由欧米茄&#xff08;OMEGA&#xff0c;Ω&#xff09;提供&#xff0c;今年的东京奥运会将会是第28届。 瑞士计时公司&#xff08;Swiss Timing&#xff09;基于火星Mars ZX2核心板打造了为奥运会等大型体育赛事…

Redis教程——数据类型(哈希、集合)

上篇文章我们学习了Redis教程——数据类型&#xff08;字符串、列表&#xff09;&#xff0c;这篇文章学习Redis教程——数据类型&#xff08;哈希表、集合&#xff09; 哈希表Hash 哈希表是一个string类型的field(字段)和value(值)的映射表&#xff0c;hash特别适合用于存储…

web轮播图

思路&#xff1a; 例如&#xff1a;有5张轮播的图片&#xff0c;每张图片的宽度为1024px、高度为512px.那么轮播的窗口大小就应该为一张图片的尺寸&#xff0c;即为&#xff1a;1024512。之后将这5张图片0px水平相接组成一张宽度为&#xff1a;5120px,高度依然为&#xff1a;5…

问题解决:pip install __命令安装不了Python库

项目环境&#xff1a; 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3-2.4.0&#xff0c;Pycharm2023.1.3 问题描述①&#xff1a; pip install 命令安装不了需要的安装的Python库&#xff0c;以PyMuPDF为例 1 socket.timeout: The read operation t…

ICASSP 2024会议现场第四弹 晚会上韩风歌舞惊喜连连

会议之眼 快讯 在科技的浪潮中&#xff0c;ICASSP 2024会议作为全球信号处理领域的风向标&#xff0c;今日在充满活力韩国迎来了它的第五天日程&#xff01;会场中热烈的讨论和灵感迸发的交流&#xff0c;让会场仿佛成为一座思想的熔炉&#xff0c;不断燃烧着创新的火花&#…

2024经常用且免费的10个网盘对比,看看哪个比较好用!

网盘在我们的工作和学习中经常会用到&#xff0c;也是存储资料的必备工具&#xff0c;有了它&#xff0c;我们就不用走到哪都带着移动硬盘了&#xff0c;而目前市场上的主流网盘还有数十款&#xff0c;其中有免费的也有付费的&#xff0c;各家不一&#xff0c;今天小编就来为您…

ins视频批量下载,instagram批量爬取视频信息【爬虫实战课1】

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…

Unity解决:导出安卓apk 安装时报错:应用未安装:软件包似乎无效

Unity2018.4.36 导出安卓apk 安装时报错&#xff1a;应用未安装&#xff1a;软件包似乎无效 解决办法&#xff1a;因为安装到安卓12 需要添加添加过滤规则 在AS工程AndroidManifest.xml 添加过滤规则即可。 android:exported"true"

爬虫 | 网易新闻热点数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目是一个简单的网络爬虫&#xff0c;用于从网易新闻的热点新闻列表中提取标题和对应的链接&#xff0c;并将提取到的数据保存到一个 CSV 文件中。 目录 一、技术栈 二、功能说明 三、注意事项 四、代码解析 1. 导入所需…

[天梯赛] 图上的动态规划与Dijkstra

题目 刚开始的思路 一开始是想到了要用Dijkstra&#xff0c;但是不知道如何找到多条路径的信息&#xff08;刚开始是想把所有最短路找到之后再比较找到最大的救援队数量&#xff09; 正确的思路 在Dijkstra的过程中&#xff0c;分两种情况&#xff1a; 找到更短路径进行更新…

geolife笔记/python笔记:trackintel.io.read_geolife

此函数解析 geolife_path 目录中可用的所有 geolife 数据 trackintel.io.read_geolife(geolife_path, print_progressFalse) 参数&#xff1a; geolife_path (str) 包含 geolife 数据的目录路径 print_progress (Bool, 默认为 False)如果设置为 True&#xff0c;则显示每个…

【python从入门到精通】-- 第五战:函数大总结

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

js BOM模型常用方法梳理

1、Bom定义 BOM是操作浏览器的模型&#xff0c;主要是对浏览器的一些操作。 2、获取浏览器窗口的尺寸 window.innerHeight:获取窗口的高度。 window.innerWidth:湖区窗口的宽度&#xff0c;只在window浏览器下使用。 3、弹出层 alert:弹出框。 confirm:确认框。返回值有true …

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本&#xff0c;在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典&#xff0c;等待将来进一步使用3.执行刚刚在Lua环境中定义的函数&#xff0c;以此来执行客户…

2.核心概念与安装配置

核心概念与安装配置 文章目录 核心概念与安装配置1、核心概念Docker整体架构及底层通信原理 2、安装DockerCentos安装Docker引擎阿里云镜像加速Docker run的过程 3、Docker相关命令 1、核心概念 镜像&#xff08;image&#xff09; Docker 镜像&#xff08;Image&#xff09;就…

Linux 搭建私有yum源仓库

一、环境准备 IP系统版本作用192.168.140.155CentOS 7.9.2009yum源仓库192.168.140.153CentOS 7.9.2009测试 准备两台服务器&#xff0c;一台作为yum源仓库&#xff0c;另一台作为测试使用。 二、搭建yum源服务器 &#xff08;无法连接外网的情况&#xff0c;需要去官网下载镜…

ssm058基于Java的共享客栈管理系统+jsp

共享客栈管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对房屋出租信息管理混乱&#xff0c;出…
最新文章