apache/incubator-seata · critical · FrameworkException
no available service found in cluster.
Error message
no available service found in cluster.
What it means
Error path in NettyClientChannelManager.doReconnect: the vgroup->cluster mapping resolved fine, but the registry lookup for that cluster returned zero instances (and the registry is not the File-based fallback). The client knows which cluster to search yet finds no live seata-server registered there; with failFast this message is thrown, otherwise it is only logged and retried.
Source
Thrown at core/src/main/java/org/apache/seata/core/rpc/netty/NettyClientChannelManager.java:222
if (CollectionUtils.isEmpty(availList)) {
RegistryService registryService = RegistryFactory.getInstance();
String clusterName = registryService.getServiceGroup(transactionServiceGroup);
if (StringUtils.isBlank(clusterName)) {
LOGGER.error(
"can not get cluster name in registry config '{}{}', please make sure registry config correct",
ConfigurationKeys.SERVICE_GROUP_MAPPING_PREFIX,
transactionServiceGroup);
throwFailFastException(failFast, "can not get cluster name in registry config.");
return;
}
if (!(registryService instanceof FileRegistryServiceImpl)) {
LOGGER.error(
"no available service found in cluster '{}', please make sure registry config correct and keep your seata server running",
clusterName);
}
throwFailFastException(failFast, "no available service found in cluster.");
return;
}
try {
doReconnect(availList, transactionServiceGroup);
} catch (Exception e) {
if (failFast) {
throw e;
}
LOGGER.error("connect server failed. {}", e.getMessage(), e);
}
}
/**
* Reconnect to remote server of current transaction service group.
*
* @param availList avail list
* @param transactionServiceGroup transaction service group
*/View on GitHub (pinned to e01f97c6db)
Solutions
- Start the seata-server and confirm it registers (check the registry console for instances in the expected cluster/namespace/group)
- Make the cluster name in the client's vgroupMapping match the cluster the server registers to (seata.server.cluster / registry config)
- Align namespace and group between server registration and client lookup in the registry
- If servers are healthy but temporarily absent, disable fail-fast to let the client keep retrying in the background
Example fix
# server application.yml
seata:
registry:
type: nacos
nacos:
cluster: default # must equal the value in the client's vgroup-mapping
# client application.yml
seata:
service:
vgroup-mapping:
my_tx_group: default # <- matches 'default' Defensive patterns
Strategy: validation
Validate before calling
List<InetSocketAddress> instances = RegistryFactory.getInstance().lookup(txServiceGroup);
if (CollectionUtils.isEmpty(instances)) {
// cluster empty: block startup or fall back to file grouplist
} Try / catch
catch (Exception e) {
if ("no available service found in cluster.".equals(e.getMessage())) {
// check server registration in registry console; retry once servers appear
}
} Prevention
- Run health checks on seata-server registration, not just process liveness
- Match cluster/namespace/group between server and client registry configs
- Keep fail-fast off in environments where servers start after clients
When it happens
Trigger: failFast=true with a correct cluster mapping but an empty instance list in the registry: no seata-server registered, instances failed health checks, or registered under a different cluster name/group/namespace.
Common situations: seata-server not started; server registered to a different cluster name (service.default.grouplist vs registry cluster); Nacos namespace/group mismatch between server registration and client lookup; all instances pruned after network issues.
Related errors
- Failed to get available servers
- 0110
- can not connect to [{invalidAddress}]
- can not get cluster name in registry config.
- Server start failed
AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14).
Data as JSON: /api/errors/45781869056a0a7b.
Report an issue: GitHub.