IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> springBootAlibaba2.2.5+nacos1.3.2+seata1.3.0配置 -> 正文阅读

[大数据]springBootAlibaba2.2.5+nacos1.3.2+seata1.3.0配置

版本说明:

spring cloud alibaba和spring cloud和spring boot和seata的版本对应关系:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

说明?

nacos配置不难,此处不予介绍,spring cloud alibaba同理。主要介绍seata1.3.0的联合配置。

Seata下载

Releases · seata/seata · GitHub

解压包下conf/file.conf配置修改,使数据存于数据库中。

主要是改mode为db,再修改对应db的链接用户密码。

store {

? ## store mode: file、db、redis

? ## mode = "file"

? mode = "db"??? ##改成用数据库存储

? ## rsa decryption public key

?db {

??? ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.

??? datasource = "druid"

??? ## mysql/oracle/postgresql/h2/oceanbase etc.

??? dbType = "mysql"

??? driverClassName = "com.mysql.cj.jdbc.Driver"?? #mysql8以上,添加cj

??? ## if using mysql to store the data, recommend add rewriteBatchedStatements=true in jdbc connection param

??? url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true"? ?#需要建立名为seata的数据库

??? user = "root"

??? password = "**********"? #(账号密码仅为示意,使用自己的。)

??? minConn = 5

??? maxConn = 100

??? globalTable = "global_table"

??? branchTable = "branch_table"

??? lockTable = "lock_table"

??? queryLimit = 100

??? maxWait = 5000

? }

对应数据库建立,这里使用mysql

create database seata;
use seata;
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

解压包下registry.conf配置修改

配置注册中心和配置中心。这里注册和配置都是在nacos中。

特别注意:seata的奇葩之处在于,namespace, 在registry里面id,即32位随机数,不是名字,config里面是名字,如dev,public等,不是id.

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

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "60331b85-f8f6-47b1-9bbe-04c86086da8f"  # 此处是id,不是名字。
    cluster = "default"
    username = ""
    password = ""
	# dataId = "seataServer.properties" # 添加dataId,配置项,这里不需要。
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    # application = "seata-server" # 配置中心不需要。
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "dev"   # 此处不是id,是名字。
    cluster = "default"
    username = ""
    password = ""
	# 在nacos中定义的配置名
	# dataId = "seataServer.properties"  #搞不定,不要了。
  }
}

配置中心配置项

配置内容参考https://github.com/seata/seata/tree/develop/script/config-center config.txt并按需修改保存

config.txt配置放在安装seata的安装目录下

transport.type=TCP

transport.server=NIO

transport.heartbeat=true

transport.enableClientBatchSendRequest=true

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

transport.serialization=seata

transport.compressor=none

# server

server.recovery.committingRetryPeriod=1000

server.recovery.asynCommittingRetryPeriod=1000

server.recovery.rollbackingRetryPeriod=1000

server.recovery.timeoutRetryPeriod=1000

server.undo.logSaveDays=7

server.undo.logDeletePeriod=86400000

server.maxCommitRetryTimeout=-1

server.maxRollbackRetryTimeout=-1

server.rollbackRetryTimeoutUnlockEnable=false

server.distributedLockExpireTime=10000

# store

#model改为db

store.mode=db

store.lock.mode=file

store.session.mode=file

# store.publicKey=""

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

# 改为上面创建的seata服务数据库

store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true

# 改为自己的数据库用户名

store.db.user=

# 改为自己的数据库密码

store.db.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

store.redis.mode=single

store.redis.single.host=127.0.0.1

store.redis.single.port=6379

# store.redis.sentinel.masterName=""

# store.redis.sentinel.sentinelHosts=""

store.redis.maxConn=10

store.redis.minConn=1

store.redis.maxTotal=100

store.redis.database=0

# store.redis.password=""

store.redis.queryLimit=100

# log

log.exceptionRate=100

# metrics

metrics.enabled=false

metrics.registryType=compact

metrics.exporterList=prometheus

metrics.exporterPrometheusPort=9898

# service

# 自己命名一个vgroupMapping,非常重要,关系到spring cloud+nacos+seata的整合

#分布式事务组名称my_test_tx_group名字无所谓,default名字也无所谓,该配置注册到nacos后。spring cloud中的名字和他们一致就可以了

service.vgroupMapping.my_test_tx_group=default?

service.default.grouplist=127.0.0.1:8091

service.enableDegrade=false

service.disableGlobalTransaction=false

# client

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.tableMetaCheckerInterval=60000

client.rm.sqlParserType=druid

client.rm.reportSuccessEnable=false

client.rm.sagaBranchRegisterEnable=false

client.rm.tccActionInterceptorOrder=-2147482648

client.tm.commitRetryCount=5

client.tm.rollbackRetryCount=5

client.tm.defaultGlobalTransactionTimeout=60000

client.tm.degradeCheck=false

client.tm.degradeCheckAllowTimes=10

client.tm.degradeCheckPeriod=2000

client.tm.interceptorOrder=-2147482648

client.undo.dataValidation=true

client.undo.logSerialization=jackson

client.undo.onlyCareUpdateColumns=true

client.undo.logTable=undo_log

client.undo.compress.enable=true

client.undo.compress.type=zip

client.undo.compress.threshold=64k

接下来用nacos-config.sh将上述配置写入注册中心。

网址:https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh 。将nacos-config.sh 复制到解压包下/conf/nacos-config.sh,在当前文件夹下,进入git.bash,输入如下命令。

sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 0af6e97b-a684-4647-b696-7c6d42aecce7 -u nacos -w nacos

命令解析:-h -p 指定nacos的端口地址;-g 指定配置的分组,注意,是配置的分组;-t 指定命名空间id; -u -w指定nacos的用户名和密码,同样,这里开启了nacos注册和配置认证的才需要指定。

注意:这里的命名空间id一定要有,由于nacos的命名空间public没有对应id,所以配置项不能放在public下

启动seata,nacos

nacos启动略去,seata启动要进入解压包下/bin,点击seata-server.bat,启动seata.(seata启动的端口是8091)

http://localhost:8848/nacos 可以看到seata已经注册进了nacos

spring cloud alibaba配置。

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.3.0</version>
    </dependency>

yml

tx-service-groupmy_test_tx_group。根据这个key拿到集群名称fsp_tx_group,并且上面的config.txt中的中的server.vgroupMapping的集群也要是这个名字。

注意: 下面seata.registry.nacos.cluster要和seata.service.vgruopMapping.my_test_tx_group一致。否则报错。??

server:
  port: 2001


spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:  #学习nacos时添加。
      discovery:
        group: SEATA_GROUP       #分组
        #namespace: 6c990727-93b2-4081-a8c6-6b015c56eda2 #不指定命名空间。默认public
        #username: nacos  #nacos账号密码,没设置就不要了
        #password: *****
        server-addr: localhost:8848  #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址)

  datasource:
    # 当前数据源操作类型,要用的是 seata的
    #type: com.alibaba.druid.pool.DruidDataSource
    # mysql驱动类
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/seata_order?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: 123456

seata:   # seata 1.4.2使用
  enabled: true
  enable-auto-data-source-proxy: true #是否开启数据源自动代理,默认为true
  tx-service-group: my_test_tx_group  #要与配置文件中的vgroupMapping一致
  registry:  #registry根据seata服务端的registry配置
    type: nacos #默认为file
    nacos:
      #application: seata-server #配置自己的seata服务
      #server-addr: localhost:8848 #根据自己的seata服务配置
      server-addr: ${spring.cloud.nacos.discovery.server-addr}
      #username: #根据自己的seata服务配置
      #password: #根据自己的seata服务配置
      namespace: 60331b85-f8f6-47b1-9bbe-04c86086da8f #根据自己的seata服务配置
      cluster: default # 配置自己的seata服务cluster, 默认为 default,这里要和service.vgroupMapping.my_test_tx_group: default保持一致,否则报错service not found.
      group: ${spring.cloud.nacos.discovery.group} #根据自己的seata服务配置
  config:
    #type: nacos #默认file,如果使用file不配置下面的nacos,直接配置seata.service,可不要
    nacos:
      #server-addr: localhost:8848 #根据自己的seata服务配置
      server-addr: ${spring.cloud.nacos.discovery.server-addr}
      group: ${spring.cloud.nacos.discovery.group} #配置自己的dev
      username: ***** #配置自己的username
      password: ***** #配置自己的password
      namespace: 60331b85-f8f6-47b1-9bbe-04c86086da8f #配置自己的namespace
      cluster: default # 配置自己的seata服务cluster, 默认为 default
      #dataId: seataServer.properties  #配置自己的dataId,由于搭建服务端时把客户端的配置也写在了seataServer.properties,所以这里用了和服务端一样的配置文件,实际客户端和服务端的配置文件分离出来更好
  service:  #指定事务组名,nacos的seata配置中心内部已经配置了。
    #vgroup-mapping:   # seata1.0以后改成vgroupMapping
    vgroupMapping:
      my_test_tx_group: default # 这里my_test_tx_group要特别注意和nacos配置中心中配置的要保持一直;值default要和seata.registry.cluster的值保持一致。

feign:
  hystrix:
    enabled: false
logging:
  level: #日志打印级别。
    io:
      seata: info

mybatis:  #指名mapper地址。
  mapperLocations: classpath*:mapper/*.xml
  #type-aliases-package: com.atguigu.springcloud.entities  #所有Entity别名类所在包

最后启动,齐活。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 16:03:48  更:2021-12-18 16:04:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:34:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码