最近学习seata的时候报了错误no available service 'null' found, please make sure registry config correct,服务名在配置文件中都有的,没办法只能跟源码了
环境springcloud Hoxton.SR3 +Springboot 2.2.5.RELEASE+seata1.1+nacos1.4
seata包下载太慢了,直接使用的编译版本1.2-SNAPSHOT
本人遇到这个问题有两个原因
1.没有使用官网的配置,直接拿的别人的配置文件导入的
2.没有引入依赖引起
下面看看原因
报错的源码seata1.0
io.seata.core.rpc.netty.NettyClientChannelManager#reconnect
void reconnect(String transactionServiceGroup) { List<String> availList = null; try { availList = getAvailServerList(transactionServiceGroup); } catch (Exception e) { LOGGER.error("Failed to get available servers: {}", e.getMessage(), e); return; } if (CollectionUtils.isEmpty(availList)) { String serviceGroup = RegistryFactory.getInstance() .getServiceGroup(transactionServiceGroup); LOGGER.error("no available service '{}' found, please make sure registry config correct", serviceGroup); return; } for (String serverAddress : availList) { try { acquireChannel(serverAddress); } catch (Exception e) { LOGGER.error("{} can not connect to {} cause:{}",FrameworkErrorCode.NetConnect.getErrCode(), serverAddress, e.getMessage(), e); } } }
io.seata.discovery.registry.RegistryService#getServiceGroup
String PREFIX_SERVICE_MAPPING = "vgroup_mapping.";
/**
* The constant PREFIX_SERVICE_ROOT.
*/
String PREFIX_SERVICE_ROOT = "service";
/**
* The constant CONFIG_SPLIT_CHAR.
*/
String CONFIG_SPLIT_CHAR = ".";
default String getServiceGroup(String key) {
Configuration config = ConfigurationFactory.getInstance();
return config.getConfig(PREFIX_SERVICE_ROOT + CONFIG_SPLIT_CHAR + PREFIX_SERVICE_MAPPING + key);
}
上面红色部分就是根源所在,1.1版本之后
vgroup_mapping改成vgroupMapping了
所以大家在导入的seata配置的时候直接上源码下面的script目录下去找配置文件修改好了导入,1.1之后之前的nacos-config.txt也去掉了nacos
nacos-config.sh在上面nacos目录中
所以大家如果使用1.1版本以上的seata组名记得用
vgroupMapping,1.0及之前的用vgroup_mapping,记得所有含有这个的都要一起改哦
另外一个原因就是你的模块没有引入spring-cloud-alibaba-seata依赖引起的
欢迎有兴趣的同学加入 513650703一起学习