美文网首页
分布式事务中间件seata安装

分布式事务中间件seata安装

作者: sharedCode | 来源:发表于2020-11-20 10:06 被阅读0次

    前言

    由于项目里面需要使用到分布式事务,为了解决这个难题,调研了一些分布式事务框架,希望让开发用个注解就能解决内部系统之间的调用问题。 最终选择了seata

    官方文档:

    https://seata.io/zh-cn/docs/overview/what-is-seata.html

    https://github.com/seata/seata/releases

    安装

    官方安装指南

    http://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

    Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。

    资源目录介绍

    点击查看

    • client

    存放client端sql脚本,参数配置

    • config-center

    各个配置中心参数导入脚本,config.txt(包含server和client,原名nacos-config.txt)为通用参数文件

    • server

    server端数据库脚本及各个容器配置

    注意事项

    • seata-spring-boot-starter
    内置GlobalTransactionScanner自动初始化功能,若外部实现初始化,请参考SeataAutoConfiguration保证依赖加载顺序
    默认开启数据源自动代理,可配置seata.enable-auto-data-source-proxy: false关闭
    
    • spring-cloud-alibaba-seata

    查看版本说明 2.1.0内嵌seata-all 0.7.1,2.1.1内嵌seata-all 0.9.0,2.2.0内嵌seata-spring-boot-starter 1.0.0

    2.1.0和2.1.1兼容starter解决方案:
    @SpringBootApplication注解内exclude掉spring-cloud-alibaba-seata内的com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration
    

    启动Server

    Server端存储模式(store.mode)现有file、db两种(后续将引入redis、raft),file模式无需改动,直接启动即可,下面专门讲下db启动步骤。
    注:file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高;
    db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些。

    步骤一:启动包

    • 点击下载
    • 官方钉钉群(群号:23171167,1群5000人已满,2群),qq群(群号:254657148)群文件共享下载

    步骤二:建表

    全局事务会话信息由3块内容构成,全局事务-->分支事务-->全局锁,对应表global_table、branch_table、lock_table

    步骤三:修改store.mode

    启动包: seata-->conf-->file.conf,修改store.mode="db"
    源码: 根目录-->seata-server-->resources-->file.conf,修改store.mode="db"

    步骤四:修改数据库连接

    启动包: seata-->conf-->file.conf,修改store.db相关属性。
    源码: 根目录-->seata-server-->resources-->file.conf,修改store.db相关属性。

    步骤五:启动

    • 源码启动: 执行Server.java的main方法
    • 命令启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db -n 1 -e test
        -h: 注册到注册中心的ip
        -p: Server rpc 监听端口
        -m: 全局事务会话信息存储模式,file、db,优先读取启动参数
        -n: Server node,多个Server时,需区分各自节点,用于生成不同区间的transactionId,以免冲突
        -e: 多环境配置参考 http://seata.io/en-us/docs/ops/multi-configuration-isolation.html
    

    注: 堆内存建议分配2G,堆外内存1G

    业务系统集成Client

    步骤一:添加seata依赖(建议单选)

    • 依赖seata-all
    • 依赖seata-spring-boot-starter,支持yml、properties配置(.conf可删除),内部已依赖seata-all
    • 依赖spring-cloud-alibaba-seata,内部集成了seata,并实现了xid传递

    步骤二:undo_log建表、配置参数

    步骤三:数据源代理(不支持自动和手动配置并存)

    • 0.9.0版本开始seata支持自动代理数据源
    1.1.0: seata-all取消属性配置,改由注解@EnableAutoDataSourceProxy开启,并可选择jdk proxy或者cglib proxy
    1.0.0: client.support.spring.datasource.autoproxy=true
    0.9.0: support.spring.datasource.autoproxy=true
    
    • 手动配置可参考下方的例子
    @Primary
    @Bean("dataSource")
    public DataSourceProxy dataSource(DataSource druidDataSource) {
        return new DataSourceProxy(druidDataSource);
    }
    

    步骤四:初始化GlobalTransactionScanner

    • 手动
    @Bean
     public GlobalTransactionScanner globalTransactionScanner() {
       String applicationName = this.applicationContext.getEnvironment().getProperty("spring.application.name");
               String txServiceGroup = this.seataProperties.getTxServiceGroup();
               if (StringUtils.isEmpty(txServiceGroup)) {
                   txServiceGroup = applicationName + "-fescar-service-group";
                   this.seataProperties.setTxServiceGroup(txServiceGroup);
               }
       
               return new GlobalTransactionScanner(applicationName, txServiceGroup);
      }
    
    • 自动,引入seata-spring-boot-starter、spring-cloud-alibaba-seata等jar

    步骤五:实现xid跨服务传递

    • 手动 参考源码integration文件夹下的各种rpc实现 module
    • 自动 springCloud用户可以引入spring-cloud-alibaba-seata,内部已经实现xid传递

    相关文章

      网友评论

          本文标题:分布式事务中间件seata安装

          本文链接:https://www.haomeiwen.com/subject/ypqdiktx.html