seata(6):nacos
seata除了使用文件作为默认的配置中心和服务发现外,还可以使用nacos,我们学习下如何配置:首先启动mysql、nacos、seata,然后copy默认配置进行修改
# docker run -d --name nacos -p 8848:8848 -e MODE=standalone -e MYSQL_MASTER_SERVICE_HOST=你的mysql所在ip -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=mysql密码 -e MYSQL_SLAVE_SERVICE_HOST=你的mysql所在ip -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_DATABASE_NUM=1 nacos/nacos-server:latest# docker run -d --name seata -p 8091:8091 -e SEATA_IP=你想指定的ip -e SEATA_PORT=8091 seataio/seata-server:1.4.2version: "3.1"services: mysql: image: mysql:5.7 container_name: mysql environment: - MYSQL_ROOT_PASSWORD=123456 command: --default-authentication-plugin=mysql_native_password --default-time-zone='+08:00' volumes: - ./mysql:/docker-entrypoint-initdb.d - ./mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf ports: - "3306:3306" extra_hosts: - host.docker.internal:host-gateway seata-server: image: seataio/seata-server:1.5.2 ports: - "7091:7091" - "8091:8091" environment: - STORE_MODE=db # 以SEATA_IP作为host注册seata server # - SEATA_IP=host.docker.internal # - SEATA_PORT=8091 volumes: # - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" #设置系统时区 # - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #设置时区 # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中 # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件] - /Users/xiazemin//resources:/seata-server/resources - /Users/xiazemin/logs:/root/logs/seata/ depends_on: - mysql - nacos extra_hosts: - host.docker.internal:host-gateway nacos: image: nacos/nacos-server:2.0.2 ports: - "8848:8848" environment: - MODE=standalone - MYSQL_MASTER_SERVICE_HOST=host.docker.internal - MYSQL_MASTER_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_HOST=host.docker.internal - MYSQL_SERVICE_DB_NAME=nacos - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123456 - MYSQL_MASTER_SERVICE_USER=root - MYSQL_MASTER_SERVICE_PASSWORD=123456 - MYSQL_SLAVE_SERVICE_HOST=host.docker.internal - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_DATABASE_NUM=1 - NACOS_AUTH_SYSTEM_TYPE=nacos volumes: - /Users/xiazemin/nacos/conf:/home/nacos/conf - /Users/xiazemin/nacos/data:/home/nacos/data depends_on: - mysql extra_hosts: - host.docker.internal:host-gateway
然后,首先修改nacos的配置文件/nacos/conf/application.properties
# springserver.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}server.contextPath=/nacosserver.port=${NACOS_APPLICATION_PORT:8848}spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}nacos.cmdb.dumpTaskInterval=3600nacos.cmdb.eventTaskInterval=10nacos.cmdb.labelTaskInterval=300nacos.cmdb.loadDataAtStart=falsedb.num=${MYSQL_DATABASE_NUM:1}db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}&serverTimezone=UTCdb.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}&serverTimezone=UTCdb.user=${MYSQL_SERVICE_USER}db.password=${MYSQL_SERVICE_PASSWORD}### The auth system to use, currently only 'nacos' is supported:nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}### The token expiration in seconds:nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}### The default token:nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D# default current work dirserver.tomcat.basedir=## spring security config### turn off securitynacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}# metrics for elastic searchmanagement.metrics.export.elastic.enabled=falsemanagement.metrics.export.influx.enabled=falsenacos.naming.distro.taskDispatchThreadCount=10nacos.naming.distro.taskDispatchPeriod=200nacos.naming.distro.batchSyncKeyCount=1000nacos.naming.distro.initDataRatio=0.9nacos.naming.distro.syncRetryDelay=5000nacos.naming.data.warmup=trueservice.vgroupMapping.default_tx_group=default### Security ###nacos.core.auth.enabled=truenacos.core.auth.username=nacosnacos.core.auth.password=nacos
然后修改seata的配置文件/resources/application.yml
server: port: 7091spring: application: name: seata-serverlogging: 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_logstashconsole: user: username: seata password: seataseata: config: # support: nacos, consul, apollo, zk, etcd3 type: nacos #file nacos: server-addr: host.docker.internal:8848 namespace: group: SEATA_GROUP username: nacos password: nacos ##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 #file nacos: application: seata-server server-addr: host.docker.internal:8848 group: SEATA_GROUP namespace: cluster: default username: nacos password: nacos ##if use MSE Nacos with auth, mutex with username/password attribute #access-key: "" #secret-key: "" store: # support: file 、 db 、 redis mode: db db: datasource: druid dbType: mysql # 需要根据mysql的版本调整driverClassName # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver # mysql8以下版本的driver:com.mysql.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://host.docker.internal:3306/seata_server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false user: root password: 123456 min-conn: 5 max-conn: 100 global-table: global_table branch-table: branch_table lock-table: lock_table distributed-lock-table: distributed_lock query-limit: 100 max-wait: 5000 # server: # service-port: 8091 #If not configured, the default is '${server.port} + 1000' security: secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 tokenValidityInMilliseconds: 1800000 ignore: urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
尝试启动
% docker compose -f ./seata/exp4/docker-compose.yaml up
查看效果,首先登录nacos的控制端
http://127.0.0.1:8848/nacos/#/login,输入用户名:nacos,密码:nacos可以看到下面界面

至此配置中心启动成功