seata 集成报错记录 seata no available service ‘null’ found, please make sure registry config correct
环境
- springcloud + nacos 1.4.1 + seata 1.4.2
- 并且seata使用naocs进行服务治理和配置管理
- config.txt配置内容
service.vgroupMapping.intellsite-system-group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://修改数据库IP:3306/ry-seata?useUnicode=true
store.db.user=root
store.db.password=修改数据库密码
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
client.undo.logSerialization=kryo
- client端yaml配置
# spring配置
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,slf4j
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://数据库IP:3306/intellsite?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 修改密码
# 从库数据源
# seata_order数据源
order:
username: root
password: 修改密码
url: jdbc:mysql://数据库IP:3306/seata_order?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
# seata_account数据源
account:
username: root
password: 修改密码
url: jdbc:mysql://数据库IP:3306/seata_account?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
# seata_product数据源
product:
username: root
password: 修改密码
url: jdbc:mysql://数据库IP:3306/seata_product?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
#开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
seata: true
# seata配置
seata:
# 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启
enabled: true
# Seata 应用编号,默认为 ${spring.application.name}
application-id: ${spring.application.name}
# Seata 事务组编号,用于 TC 集群名
tx-service-group: ${spring.application.name}-group
# 关闭自动代理
enable-auto-data-source-proxy: false
# 服务配置项
service:
# 虚拟组和分组的映射
vgroup-mapping:
intellsite-system-group: default
config:
type: nacos
nacos:
serverAddr: 127.0.0.1:8848
group: SEATA_GROUP
namespace:
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
namespace:
在自己本地环境进行集成后GlobalTransaction 能生效, 同样的代码在公司的测试环境进行seata集成,报错 “seata no available service ‘null’ found, please make sure registry config correct”,
网上找了说是配置的问题,检查了配置和本地的完全没有变,突然一天晚上睡觉前想到一个地方可能有点问题,第二天试了一下果然解决了。
原因
自己本地和公司测试环境用的nacos是同一个数据库,自己在本地执行了 nacos-config.sh , 并在nacos中生成了对应的seata配置,所有在测试环境就没有再执行 nacos-config.sh 脚本,导致测试环境的nacos检查不到对应的配置,故报错service为“null”
处理
在测试环境重新执行了 nacos-config.sh脚本,使nacos重新添加配置到nacos中
得到经验
nacos的配置通过其他方法修改了配置(如直接修改数据库,或通过其他同数据库的nacos进行编辑),nacos没法生效,必须在当前nacos的控制台进行新增或编辑,或将已经有的点编辑,不修改任何配置,直接点发布,让当前环境的nacos检查到配置的变化