天天看点

seata1.2整合

seata1.2.0 seata1.3.0 seata1.4.2大同小异

官方版本升级指南

http://seata.io/zh-cn/docs/ops/upgrade.html

有疑问可以留言

一、下载安装配置

1)、下载seata-server-1.2.0同时下载seata-1.2.0.zip代码

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

2)、打开seata-1.2.0.zip源码目录:script/config.txt

里边大都是默认的不需要改,也不需要留,只留下更改的一些就好了

seata1.2整合
# 【重要】my_test_tx_group这个事务分组所使用的seata-server的集群名称,要与后面seata-server中registry.conf的registry.nacos.cluster保持一致
service.vgroupMapping.my_test_tx_group=testCluster
# 使用db存储
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
# 因为是mysql8.x版本,驱动位置发生了改变(有了.cj)
store.db.driverClassName=com.mysql.cj.jdbc.Driver
# mysql8.x版本serverTimezone需要按照下面设定(否则会报serverTimezone错误,一堆乱码)。另外 这个属性在推送到nacos之后参数可能会消失,需要手动修改以下
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&serverTimezone=GMT%2B8
store.db.user=root
store.db.password=root
           

3)、打开源码目录:/script/nacos/,执行nacos-config.sh脚本,使用git bash窗口执行

sh nacos-config sh -h nacos的Ip地址 -p nacos的端口号 -u nacos用户名 -w nacos密码 -g 本配置列表的所属分组(要与后面seata服务端config.nacos.group保持一致,默认为SEATA_GROUP)
           

可以参考笔者为:

sh nacos-config.sh -h 172.18.64.131 -p 8848 -u nacos -w nacos -g SEATA_GROUP
           

4)、执行成功在nacos注册中心配置管理-配置列表可看到:

seata1.2整合

5)、检查

查看store.db.url中参数是否丢失,如果丢失要重新配置一下

此步骤为推送参数配置至nacos,配置中心使用的也是nacos

二、配置seata所需mysql数据库

1)、先创建数据库,名为seata

2)、打开源码目录/script/server/db取mysql.sql,执行脚本至先前建好的seata数据库

3)、执行成功可看到

seata1.2整合

三、配置seata服务并启动

1)、到seata-server1.2目录/config/下

2)、配置registory.config

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  # 如果是file,则需要配置file.conf
  # 因为本例使用nacos,此处填写nacos
  type = "nacos"
  nacos {
  # 【重要】本服务端在nacos中的微服务名称,后面seata客户端的application.yml中要用到
    application = "seata-server"
	# nacos地址
    serverAddr = "172.17.64.130:8848"
	# seata-server微服务的分组
    group = "SEATA_GROUP"
	# seata-server微服务的命名空间,此处省略,使用默认值public
    namespace = ""
	# 【重要】seata-server作为集群时的集群名字,
	#与前面nacos中设定事务分组属性(service.vgroupMapping.my_test_tx_group)保持一致
    cluster = "testCluster"
	# nacos1.2加入了鉴权,账号密码不可省略
    username = "nacos"
    password = "nacos"
  }
}
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  nacos {
    serverAddr = "172.17.64.130:8848"
    namespace = ""
	# 【重要】本服务端的配置在nacos配置列表哪个分组下,要与上面推送到nacos的分组列表保持一致,默认是SEATA_GROUP。
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }
}
           

3)、因为服务注册和服务配置都是使用的nacos,所以读者这里并不需要file.conf中的任何属性,自然也不需要改动。后面需要修改配置直接在nacos中修改,SEATA_GROUP分组

4)、切换至/bin/目录,执行bat脚本准备启动

内存不够可以更改的小点

seata1.2整合

5)、naocs控制台可以看到

seata1.2整合
seata1.2整合

四、客户端改造

1.首先要看spring-cloud-alibaba组件版本说明:

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
           
seata1.2整合

2.笔者因为项目以前接nacos时Spring Cloud Alibaba Version使用的是2.2.1.RELEASE,所以只能使用Seata Version为1.20的版本,不注意这里很容易有意想不到的错误

3.配置pom

<!-- seata -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>
           

3.配置application.yml,这里只有seata的配置

mybatis:
  mapperLocations: classpath:mapper/*.xml
seata:
  # 开启自动装配
  enabled: true
  # 本客户端的微服务名称
  application-id: seata-account-service
  # 例如此时会读取 SEATA_GROUP 这个分组下的 service.vgroupMapping.my_test_tx_group 这个属性的值。
  # 从上面的配置可以知道笔者此处的最终值为 testCluster。后面程序运行会找到 testCluster 这个集群的seata服务端,进行通讯。
  tx-service-group: my_test_tx_group
  config:
    type: nacos
    nacos:
      username: nacos
      password: nacos
      server-addr: 172.18.64.131:8848
      # 读取的配置分组
      group: SEATA_GROUP
  # 注册中心设置
  registry:
    type: nacos
    nacos:
      # SEATA服务中心的微服务名,此处与服务端保持一致
      application: seata-server
      server-addr: 172.18.64.131:8848
      username: nacos
      password: nacos
           

4.使用seata代理数据源的配置

1)、添加DataSourceProxyConfig配置类

package com.kasinf.springcloud.alibaba.config;

import com.alibaba.druid.pool.DruidDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;


@Configuration
public class DataSourceProxyConfig {


    @Value("${mybatis.mapperLocations}")
    private String mapperLocations;
    
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }
    @Bean
    public DataSourceProxy dataSourceProxy(DataSource dataSource) {
        return new DataSourceProxy(dataSource);
    }
    @Bean
    public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSourceProxy);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
        sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
        return sqlSessionFactoryBean.getObject();
    }
}
           

2)、修改启动类

// 取消数据源的自动创建,使用Seata对数据源进行代理
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@EnableFeignClients
public class SeataOrderMainApp2001 {
    public static void main(String[] args) {
        SpringApplication.run(SeataOrderMainApp2001.class, args);
    }
}
           

5.启动seata客户端,检查状态是否成功

seata1.2整合

nacos服务列表

seata1.2整合

问题:seata 1.2/seata1.3/seata1.4.2问题

1.can not get cluster name in registry config ‘service.vgroupMapping.account-service-fescar-service-group’, please mak

这类都是配置有误,读取不到正确位置的配置
1.namespace
2.group
3.tx-service-group: my_test_tx_group
           

参考:作者:zhoushiya,

https://www.cnblogs.com/zhoushiya/p/13770494.html

继续阅读