apache/incubator-seata · critical · FrameworkException
0110
0110
Error message
No available service
What it means
Thrown by AbstractNettyRemotingClient.loadBalance when it cannot pick a server address for the given transaction service group: the registry's alive lookup returned an empty list, or the load-balance selection threw (e.g. no XID for transaction-aware balancing). It is the client-side 'no TC reachable' signal before any connection attempt is made.
Source
Thrown at core/src/main/java/org/apache/seata/core/rpc/netty/AbstractNettyRemotingClient.java:304
return transactionMessageHandler;
}
public NettyClientChannelManager getClientChannelManager() {
return clientChannelManager;
}
protected String loadBalance(String transactionServiceGroup, Object msg) {
InetSocketAddress address = null;
try {
@SuppressWarnings("unchecked")
List<InetSocketAddress> inetSocketAddressList =
RegistryFactory.getInstance().aliveLookup(transactionServiceGroup);
address = this.doSelect(inetSocketAddressList, msg);
} catch (Exception ex) {
LOGGER.error("Select the address failed: {}", ex.getMessage());
}
if (address == null) {
throw new FrameworkException(NoAvailableService);
}
return NetUtil.toStringAddress(address);
}
protected InetSocketAddress doSelect(List<InetSocketAddress> list, Object msg) throws Exception {
if (CollectionUtils.isNotEmpty(list)) {
if (list.size() > 1) {
return LoadBalanceFactory.getInstance().select(list, getXid(msg));
} else {
return list.get(0);
}
}
return null;
}
protected String getXid(Object msg) {
String xid = "";
if (msg instanceof AbstractGlobalEndRequest) {View on GitHub (pinned to e01f97c6db)
Solutions
- Confirm the seata-server is running and registered under the cluster your service group maps to
- Check service.vgroupMapping.<your-tx-service-group>=<cluster-name> and the matching cluster name in the registry
- Verify registry client config (address, namespace/group for Nacos) matches the server's registry
- Watch the alive instances in the registry console; if instances exist but are pruned, check health-check failures
Example fix
# registry.conf / application.yml
# before (wrong cluster mapping)
service:
vgroupMapping:
my_tx_group: default_cluster # cluster that does not exist
# after
service:
vgroupMapping:
my_tx_group: default # cluster the seata-server actually registers to Defensive patterns
Strategy: retry
Validate before calling
List<InetSocketAddress> alive = RegistryFactory.getInstance().aliveLookup(txServiceGroup);
if (CollectionUtils.isEmpty(alive)) {
// do not attempt the send; wait for registry refresh
return;
} Try / catch
catch (FrameworkException e) {
if (FrameworkErrorCode.NoAvailableService == e.getErrCode()) {
// back off and retry after registry refresh; alert if persistent
}
} Prevention
- Monitor instance count for the seata cluster in the registry
- Add registry health checks to the client app's readiness probe
- Keep vgroupMapping->cluster mapping under test/config review
When it happens
Trigger: Calling an API that internally resolves a server address (e.g. client send paths that call loadBalance) when RegistryFactory.getInstance().aliveLookup(transactionServiceGroup) returns an empty list, or doSelect throws because list is empty or LoadBalanceFactory.select fails.
Common situations: Seata server down or not registered in the registry (Nacos/Eureka/Redis/etcd/ZooKeeper/File); wrong service.vgroupMapping.<group>=<cluster> config so the group maps to a cluster with no instances; registry connectivity issues from the client; all instances temporarily unhealthy.
Related errors
- can not connect to [{invalidAddress}]
- Failed to get available servers
- no available service found in cluster.
- The default branch type must be AT or XA. the value of the a
- 0109
AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14).
Data as JSON: /api/errors/ba6f910ef929b0f5.
Report an issue: GitHub.