Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)
一、docker啟動seata
復制出容器中的文件到容器外的目錄,我的是/mnt/seata
docker cp seata-server:/seata-server/resources /mnt/seataconfig.txt放在/mnt目錄下,內容如下:
//該項修改為相應客戶端中spring.cloud.alibaba.seata.tx-service-group的值,有多個客戶端就添加多個 //例如在官方示例springcloud-nacos-seata中order-service和storage-service中spring.cloud.alibaba.seata.tx-service-group的值 //分別為order-service-group、storage-service-group,則需要將該項配置為service.vgroupMapping.order-service-group=default //和service.vgroupMapping.storage-service-group=default service.vgroupMapping.my_test_tx_group=default //事務日志存儲模式 store.mode=db //數據庫配置項 store.db.datasource=druid store.db.dbType=mysql //這里如果使用的mysql8以上的版本的話,那么配置com.mysql.cj.jdbc.Driver store.db.driverClassName=com.mysql.cj.jdbc.Driver //配置自己相應的url,user,password,注意,這里很重要,因為我的數據庫是在主服務上運行,而seata是跑在容器里面的,所以,ip地址要寫準確,寫localhost是訪問不了的,必須通過ifconfig的命令來查看主機的具體ip store.db.url=jdbc:mysql://172.17.0.16:3306/seata?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true store.db.user=root store.db.password=root關于docker連接容器外部的mysql的參考文章
nacos-config.sh放在 /mnt/seata目錄下
這兩個文件的作用:
config.txt就是seata各種詳細的配置,執行 nacos-config.sh 即可將這些配置導入到nacos,這樣就不需要將file.conf和registry.conf放到我們的項目中了,需要什么配置就直接從nacos中讀取。
更加詳細的配置參考官方文檔
在nacos-config.sh所在的路徑下,輸入:
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 8464601b-24e6-4f02-ba7e-a2f43a698861 -u nacos -w nacos注:命令解析:-h -p 指定nacos的端口地址;-g 指定配置的分組,注意,是配置的分組;-t 指定命名空間id; -u -w指定nacos的用戶名和密碼,同樣,這里開啟了nacos注冊和配置認證的才需要指定。
配置成功如下:
nacos頁面:
修改seata-sever/resources/下的file.conf和registry.conf文件
因為我們要使用數據庫進行持久化,所以將file.conf修改如下
修改registry.conf
這里仍然要注意,如果nacos是用docker跑起來的,那么仍然要使用分配的虛擬網卡地址,而不是localhost
使用下面命令查看
然后刪除之前創建的seata的docker服務,重新使用自己配置好的掛載文件啟動seata
docker run -d --restart always --name seata-server -p 8091:8091 -e SEATA_IP=服務器公網ip(不然回報以下錯誤) -v /mnt/seata/seata-server:/seata-server seataio/seata-server:latest
而nacos集群里顯示的ip是遠程服務器里的ip,遠程服務自然無法訪問到
必須讓運行seata的容器,綁定公網ip
可以看到,nacos的服務列表里,已經有seata-server這個服務
二、創建事務日志數據庫
使用Seata的db模式需要創建相應的數據庫seata以及對應的表
//全局事務表 global_table //分支子事務表 branch_table //全局鎖表 lock_table
官方腳本地址
三、客戶端配置注意點
四、容易踩到的坑及解決方法
- 在1.1.0版本前后的命名方式不同,之前為service.vgroup_mapping.my_test_tx_group=default
- my_test_tx_group為spring.cloud.alibaba.seata.tx-service-group的值,不然會報“no available service ‘null’ found, please make sure registry config”。
參考文章1
參考文章2
參考文章3
總結
以上是生活随笔為你收集整理的Docker搭建Nacos1.3+Seata1.4+MySQL8分布式事务(服务端)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产品经理面试全流程深度复盘【面试准备篇】
- 下一篇: SpringCloud+Seata1.4