天天看點

微服務學習第三十九節Seata配置Nacos注冊中心和配置中心

Seata配置Nacos注冊中心和配置中心

Seata支援注冊服務到Nacos,以及支援Seata所有配置放到Nacos配置中心,在Nacos中統一維護;

高可用模式下就需要配合Nacos來完成

微服務學習第三十九節Seata配置Nacos注冊中心和配置中心

具體配置如下

注冊中心

Seata-server端配置注冊中心,在registry.conf中加入配置注冊中心nacos

注意:確定client與server的注冊處于同一個namespace和group,不然會找不到服務。

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

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP" # 這裡的配置要和用戶端保持一緻
    namespace = "" # 這裡的配置要和用戶端保持一緻
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
    ......
           

配置中心

  1. Seata-Server配置配置中心,在registry.conf中加入配置使用nacos作為配置中心
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
    dataId = "seataServer.properties"
  }
............
           
  1. 我們需要把Seata的一些配置上傳到Nacos中,配置比較多,是以官方給我們提供了一個config.txt,我們下載下傳并且修改其中參數,上傳到Nacos中

    下載下傳位址:https://github.com/seata/seata/tree/develop/script/config-center

  2. 具體修改:

    **注意:**事務分組:用于防護機房停電,來啟用備用機房,或者異地機房,容錯機制,當然如果Seata-Server配置了對應的事務分組,Client也需要配置相同的事務分組

    service.vgroupMapping.可以自定義=default
    default這裡必須等于 registry.config 中的cluster="default"(當然可以更改 )
               
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.rpcRmRequestTimeout=5000
transport.rpcTmRequestTimeout=10000
transport.rpcTcRequestTimeout=10000
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.mygroup=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.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
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
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
#-----------修改這個區域的JDBC連接配接-----------    
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=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.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
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
server.distributedLockExpireTime=10000
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
           
  1. 修改好這個檔案以後,我們就需要把這個檔案放到seata目錄下
微服務學習第三十九節Seata配置Nacos注冊中心和配置中心
  1. 此時我們需要把這些配置一個個的加入到Nacos配置中,是以我們需要一個腳本來進行執行,官方已經提供好了,位址為:https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
  2. 我們需要在seata-server-1.4.2檔案夾中建立一個腳本檔案nacos-config.sh,然後把腳本内容複制進去
微服務學習第三十九節Seata配置Nacos注冊中心和配置中心
  1. 利用git來進行執行指令:
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 命名空間 -u nacos -w nacos
           

參數說明:

-h:host,預設值localhost

-p:port,預設值8848

-g:配置分組,預設為SEATA_GROUP

-t:租戶資訊,對應Nacos的命名空間ID,預設為空

微服務學習第三十九節Seata配置Nacos注冊中心和配置中心
  1. 在執行naocs-config檔案的時候要注意,它預設尋找config.txt的路徑和我們的路徑不同,是以要打開naocs-config檔案進行修改,否則無法執行。
微服務學習第三十九節Seata配置Nacos注冊中心和配置中心

測試啟動

當以上的這些配置完成以後,我們就可以啟動nacos和seata-server了,此時我們檢視Nacos的配置中心,就會看到我們傳入的所有配置資訊

微服務學習第三十九節Seata配置Nacos注冊中心和配置中心

附加

各位我們Seata-Server預設端口是8091,那麼如果我們是叢集部署方式,我們如何修改端口那?

在 Linux/Mac 下

$ sh ./bin/seata-server.sh
           

在 Windows 下

bin\seata-server.bat
           

支援的啟動參數

參數 全寫 作用 備注
-h –host 指定在注冊中心注冊的 IP 不指定時擷取目前的 IP,外部通路部署在雲環境和容器中的 server 建議指定
-p –port 指定 server 啟動的端口 預設為 8091
-m –storeMode 事務日志存儲方式 支援

file

,

db

,

redis

,預設為

file

注:redis需seata-server 1.3版本及以上
-n –serverNode 用于指定seata-server節點ID

1

,

2

,

3

…, 預設為

1

-e –seataEnv 指定 seata-server 運作環境

dev

,

test

等, 服務啟動時會使用

registry-dev.conf

這樣的配置

如:

$ sh ./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m file
r節點ID | 如 `1`,`2`,`3`..., 預設為 `1`                                |
| -e   | --seataEnv   | 指定 seata-server 運作環境 | 如 `dev`, `test` 等, 服務啟動時會使用 `registry-dev.conf` 這樣的配置 |

如:

```bash
$ sh ./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m file
           

繼續閱讀