SpringBoot+Nacos1.4+Seata1.2配置

一、nacos

1. 创建nacos数据库

创建nacos数据库,运行nacos-mysql.sql

2. 修改 nacos下conf的application.properties文件

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456

3. 运行nacos下bin的shartup.cmd文件

修改cmd文件的 MODE = "standalone" (单机模式)
然后启动cmd文件
访问:localhost:8848/nacos
默认账号密码为:nacos
在这里插入图片描述

二、 seata

1. 创建数据库

创建seata数据库,运行db_store.sql文件。0.9以下包含db_store.sql文件
在业务库中运行db_undo_log.sql(管理事物日志表)

2. 对seta进行配置并推送到nacos

transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
service.vgroupMapping.service-goods-group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
store.mode=db
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
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
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
client.undo.dataValidation=true
client.undo.logSerialization=jackson
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
  1. 配置文件注意:
    (a) file.confregistry.conf两个配置文件中的格式统一转换为驼峰格式
    (b) service.vgroupMapping.service-goods-group=default(service-goods-group为自定义与后期项目中seata配置保持一致)

  2. 将配置文件推送到nacos

sh nacos-config.sh localhost

在这里插入图片描述
在这里插入图片描述
3. 修改registry.conf并启动seata

因为seata的配置已经推送到nacos,所以我们用nacos方式启动seata

registry {
    
    
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    
    
    application = "seata-server"
    serverAddr = "localhost"
    namespace = "public"
    cluster = "default"
    username = ""
    password = ""
  }
  file {
    
    
    name = "file.conf"
  }
}

config {
    
    
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  nacos {
    
    
    serverAddr = "localhost"
    namespace = "public"
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
  file {
    
    
    name = "file.conf"
  }
}

启动seata下bin的seata-server.bat文件
在这里插入图片描述

三、启动项目测试全局事务回滚

1. 搭建微服务项目包含用户服务、订单服务。订单服务yml配置seata时,tx-service-group与之前seata向nacos推送的配置保持一致

配置seata数据源代理

import com.alibaba.druid.pool.DruidDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;

@Configuration
public class SeataConfiguration {
    
    
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
    
    
        return new DruidDataSource();
    }

    @Primary
    @Bean("dataSource")
    public DataSourceProxy dataSource(DataSource druidDataSource) {
    
    
        return new DataSourceProxy(druidDataSource);
    }

}

在启动类上配置排除自动加载数据源

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

配置seata的yml

为下方代码说明
${
    
    spring.application.name} = service-goods
seata:
  enabled: true
  application-id: ${
    
    spring.application.name}
  tx-service-group: ${
    
    spring.application.name}-group
  enable-auto-data-source-proxy: true
  config:
    type: nacos
    nacos:
      namespace: public
      server-addr: ${
    
    spring.cloud.nacos.discovery.server-addr}
      group: SEATA_GROUP
  registry:
    type: nacos
    nacos:
      server-addr: ${
    
    spring.cloud.nacos.discovery.server-addr}
      namespace: public
      cluster: default

2. 启动项目测试回滚效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以观察到数据库进行了回滚,没有脏数据生成。
在这里插入图片描述
在这里插入图片描述
注意事项

  1. 如果没有按照上述在nacos创建service.vgroupMapping.service-goods-group=default配置,项目启动后会报
    在这里插入图片描述
  2. 如果设置全局异常,异常被手动捕获时,seata 获取不到异常不会进行回滚操作。

Guess you like

Origin blog.csdn.net/Caozefei_2018/article/details/117950549