天天看點

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

繼續閱讀