长时间出一个技术文章,也不会排版了
就随意记录一下,能帮到忙,是我的荣幸
关于seata1.4.x我也不做了,因为升级1.5版本 出现了一些问题,反正跟着我这边做,保证你能运行
标题已经表明,我将使用docker启动seata1.5版本
首先本地安装docker运行环境,不知道的可以学一下
1、配置文件更改1.5版本与1.4还是有很多差异的,我只做运行,1.5不在使用registry.conf 与 file.conf , 而是使用的application.yml配置,我们想要发到服务器,或指定nacos地址 ,必须更改配置文件,如下,这边采用了nacos注册中心,并且使用了nacos-config放入seata的配置,seataServer.properties ,自己使用的话,只要更改nacos的两个连接地址即可
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: admin
password: admin
seata:
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: http://192.168.1.23:8848
namespace:
group: SEATA_GROUP
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
data-id: seataServer.properties
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
preferred-networks: 30.240.*
nacos:
application: seata-server
server-addr: http://192.168.1.23:8848
group: SEATA_GROUP
namespace:
cluster: default
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,*.css,*.js,*.html,*.map,*.svg,*.png,*.ico,/console-fe/public/**,/api/v1/auth/login
2、打包将配置导入镜像
在application.yml旁边建立Dockerfile文件,内容如下
FROM seataio/seata-server:1.5.0 ADD application.yml /seata-server/resources/application.yml
执行docker命令
docker build -t seata-server:1.5.0 .
当前会下载seata,并重新命名seata及版本号,将application.yml同步到镜像中
[+] Building 3.6s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 31B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/seataio/seata-server:1.5.0 2.8s => [internal] load build context 0.0s => => transferring context: 4.33kB 0.0s => CACHED [1/2] FROM docker.io/seataio/seata-server:1.5.0@sha256:1797b0109ed31ef9d1073c77b8a3e89cc1f856f2cac6964b1dbad73a54fcf0fc 0.0s => => resolve docker.io/seataio/seata-server:1.5.0@sha256:1797b0109ed31ef9d1073c77b8a3e89cc1f856f2cac6964b1dbad73a54fcf0fc 0.0s => [2/2] ADD application.yml /seata-server/resources/application.yml 0.1s => exporting to image 0.2s => => exporting layers 0.1s => => writing image sha256:356fed758bbd523524d5e6ee7c8ef6317a6ef078555032ee17cd608794dc5bd9 0.0s => => naming to docker.io/library/seata-server:1.5.0 0.1s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
可以在运行时,进入镜像中查看更改后的内容,在resources目录application.yml
===================此时启动seata已经完成了===================
但是,nacos还没有启动,这点很重要,seata不仅要注册到nacos,还要使用config配置
3、nacos的启动nacos我使用的是2.0.3版本 ,对应的nacos-client版本也必须是2.0.x版本
docker快速启动
docker run --name docker-quick -e MODE=standalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:v2.0.3
使用mysql
docker run -d -p 8848:8848 -p 9848:9848 -e PREFER_HOST_MODE=hostname -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=127.0.0.1 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e MYSQL_SERVICE_DB_NAME=nacos_db --name nacos-standalone nacos/nacos-server
启动之后添加seataServer.properties配置
下面是seataServer.properties内容,注意:驱动必须正确
# 存储模式 store.mode=db store.db.datasource=druid store.db.dbType=mysql # 需要根据mysql的版本调整driverClassName # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver # mysql8以下版本的driver:com.mysql.jdbc.Driver store.db.driverClassName=com.mysql.jdbc.Driver # 注意根据生产实际情况调整参数host和port store.db.url=jdbc:mysql://127.0.0.1:3306/seata_db?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false # 数据库用户名 store.db.user=root # 用户名密码 store.db.password=root # 微服务里配置与这里一致 service.vgroupMapping.default_tx_group=default
此时启动seata,就能正常运行了
4、微服务的启动
pom文件的配置
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.7.RELEASE
pom
import
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.reflections
reflections
org.reflections
reflections
0.10.2
io.seata
seata-spring-boot-starter
com.alibaba.cloud
spring-cloud-starter-alibaba-seata
application.yml或者bootstrap.yml添加seata的配置
seata:
enable: true
tx-service-group: default_tx_group
registry:
type: nacos
nacos:
# 非本地请修改具体的地址
server-addr: http://192.168.1.23:8848
service:
disable-global-transaction: false
vgroupMapping:
default_tx_group: default
在更新操作的业务代码上添加全局事务注解
@GlobalTransactional
https://gitee.com/seata-io/seata/blob/v1.5.1/script/server/db/mysql.sql#
seata数据库
undo_log表
script/client/at/db/mysql.sql · Seata/seata - Gitee.com
此时所有的操作已完成,能够正常的使用分布式事务了
在使用新版本,没有足够了解的情况下,会遇到很多很多问题,不管是nacos2.0.3版本的rpc端口问题,还是seata配置的问题,解决起来特别耗费时间,本人研究的也不是很多,但也希望能够帮助大家节省时间,至于其他研究的话,以后再说吧,如果有不对的地方,劳烦大神指点一下,我这边及时更改,避免给其他小伙伴带来困扰,谢谢大家



