美文网首页
分布式事务seata在consul中的配置

分布式事务seata在consul中的配置

作者: 蜡笔广志 | 来源:发表于2019-12-03 18:01 被阅读0次

    首先是服务端:下载自信版本的seata-server,我下载的是0.9版本,下载后修改2个文件

    QQ图片20191203180107.png

    registry.conf:

    registry {
    
    # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
    
    type = "consul"
    
    consul {
    
    cluster = "seata-server" consul中显示的服务名
    
    serverAddr = "10.241.95.107:8500,10.241.95.105:8500,10.241.95.106:8500"
    
    }
    
    }
    
    config {
    
    # file、nacos 、apollo、zk、consul、etcd3
    
    type = "file"
    
    file {
    
    name = "file.conf"
    
    }
    
    }
    

    file.conf:

    transport {
    
    # tcp udt unix-domain-socket
    
    type = "TCP"
    
    #NIO NATIVE
    
    server = "NIO"
    
    #enable heartbeat
    
    heartbeat = true
    
    #thread factory for netty
    
    thread-factory {
    
    boss-thread-prefix = "NettyBoss"
    
    worker-thread-prefix = "NettyServerNIOWorker"
    
    server-executor-thread-prefix = "NettyServerBizHandler"
    
    share-boss-worker = false
    
    client-selector-thread-prefix = "NettyClientSelector"
    
    client-selector-thread-size = 1
    
    client-worker-thread-prefix = "NettyClientWorkerThread"
    
    # netty boss thread size,will not be used for UDT
    
    boss-thread-size = 1
    
    #auto default pin or 8
    
    worker-thread-size = 8
    
    }
    
    shutdown {
    
    # when destroy server, wait seconds
    
    wait = 3
    
    }
    
    serialization = "seata"
    
    compressor = "none"
    
    }
    
    service {
    
    #vgroup->rgroup
    
    vgroup_mapping.gzm= "default" 需要于客户端中的设定一致
    
    #only support single node
    
    default.grouplist = "127.0.0.1:8091"
    
    #degrade current not support
    
    enableDegrade = false
    
    #disable
    
    disable = false
    
    #unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent
    
    max.commit.retry.timeout = "-1"
    
    max.rollback.retry.timeout = "-1"
    
    }
    
    client {
    
    async.commit.buffer.limit = 10000
    
    lock {
    
    retry.internal = 10
    
    retry.times = 30
    
    }
    
    report.retry.count = 5
    
    tm.commit.retry.count = 1
    
    tm.rollback.retry.count = 1
    
    }
    
    ## transaction log store
    
    store {
    
    ## store mode: file、db
    
    mode = "db"
    
    ## database store
    
    db {
    
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.
    
    datasource = "dbcp"
    
    ## mysql/oracle/h2/oceanbase etc.
    
    db-type = "mysql"
    
    driver-class-name = "com.mysql.jdbc.Driver"
    
    url = "jdbc:mysql://xxxxx:3306/seata-server"
    
    user = "xxxxx"
    
    password = "xxxxx"
    
    min-conn = 1
    
    max-conn = 3
    
    global.table = "global_table"
    
    branch.table = "branch_table"
    
    lock-table = "lock_table"
    
    query-limit = 100
    
    }
    
    }
    
    lock {
    
    ## the lock store mode: local、remote
    
    mode = "remote"
    
    local {
    
    ## store locks in user's database
    
    }
    
    remote {
    
    ## store locks in the seata's server
    
    }
    
    }
    
    recovery {
    
    #schedule committing retry period in milliseconds
    
    committing-retry-period = 1000
    
    #schedule asyn committing retry period in milliseconds
    
    asyn-committing-retry-period = 1000
    
    #schedule rollbacking retry period in milliseconds
    
    rollbacking-retry-period = 1000
    
    #schedule timeout retry period in milliseconds
    
    timeout-retry-period = 1000
    
    }
    
    transaction {
    
    undo.data.validation = true
    
    undo.log.serialization = "jackson"
    
    undo.log.save.days = 7
    
    #schedule delete expired undo_log in milliseconds
    
    undo.log.delete.period = 86400000
    
    undo.log.table = "undo_log"
    
    }
    
    ## metrics settings
    
    metrics {
    
    enabled = false
    
    registry-type = "compact"
    
    # multi exporters use comma divided
    
    exporter-list = "prometheus"
    
    exporter-prometheus-port = 9898
    
    }
    
    support {
    
    ## spring
    
    spring {
    
    # auto proxy the DataSource bean
    
    datasource.autoproxy = false
    
    }
    
    }
    

    客户端:

    配置文件

    spring:
    
    application:
    
    name: test-server
    
    cloud:
    
    alibaba:
    
    seata:
    
    tx-service-group: gzm 需要与服务端一致
    
    consul:
    
    host: localhost
    
    port: 8500
    
    enabled: true
    
    discovery:
    
    enabled: true
    
    service-name: test-server
    
    prefer-ip-address: true
    
    heartbeat:
    
    enabled: true
    
    instance-id: xxxx
    

    pom文件

    <!--seata-->
    
    <dependency>
    
    <groupId>com.alibaba.cloud</groupId>
    
    <artifactId>spring-cloud-alibaba-seata</artifactId>
    
    <version>2.1.0.RELEASE</version>
    
    <exclusions>
    
    <exclusion>
    
    <artifactId>seata-all</artifactId>
    
    <groupId>io.seata</groupId>
    
    </exclusion>
    
    </exclusions>
    
    </dependency>
    
    <dependency>
    
    <groupId>io.seata</groupId>
    
    <artifactId>seata-all</artifactId>
    
    <version>${seata.version}</version>
    
    </dependency>
    

    然后导入服务端的配置file.conf和registry.conf即可。

    数据库修正:

    把seata-server中自带的Sql执行下,同时需要在每个应用的数据库中同样加入undo_log。

    以上就是seata在consul中的使用。

    PS:seata客户端中任一应用重启都需要将关联的应用一并重启,不然会报i.s.c.r.netty.NettyClientChannelManager : no available server to connect.的错误。

    相关文章

      网友评论

          本文标题:分布式事务seata在consul中的配置

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