apache/dubbo · error · RpcException
No provider available in {invokers}
Error message
No provider available in {invokers} What it means
Thrown by ZoneAwareClusterInvoker as the final fallback when no invoker can serve the request at all: no registry is marked preferred, none matches the requested zone, the load-balanced invoker is unavailable, and the loop over all invokers finds none available. It is the multi-registry equivalent of 'no provider available' and embeds the full invoker list.
Source
Thrown at dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/registry/ZoneAwareClusterInvoker.java:123
}
}
// load balance among all registries, with registry weight count in.
Invoker<T> balancedInvoker = select(loadbalance, invocation, invokers, null);
if (balancedInvoker != null && balancedInvoker.isAvailable()) {
return balancedInvoker.invoke(invocation);
}
// If none of the invokers has a preferred signal or is picked by the loadbalancer, pick the first one
// available.
for (Invoker<T> invoker : invokers) {
ClusterInvoker<T> clusterInvoker = (ClusterInvoker<T>) invoker;
if (clusterInvoker.isAvailable()) {
return clusterInvoker.invoke(invocation);
}
}
throw new RpcException("No provider available in " + invokers);
}
}
View on GitHub (pinned to 3a3043227f)
Solutions
- Confirm providers for the service are registered and available in at least one registry; check the admin console / registry listing.
- Verify consumer subscription covers the right group/version/interface so the directory actually populates invokers.
- Inspect router/filter config (condition/host/tag routers) that may be filtering every provider out before availability is checked.
- Restore registry connectivity and wait for the directory to refresh providers, then retry.
Example fix
// before: no providers visible in any registry
try { service.call(x); } catch (RpcException e) { /* unaware */ }
// after: detect the no-provider condition and surface remediation
try {
return service.call(x);
} catch (RpcException e) {
if (e.isNoInvokerAvailableAfterFilter()) {
alert("No providers in any registry for " + service);
}
throw e;
} Defensive patterns
Strategy: validation
Validate before calling
// Check directory has any available invoker before calling
if (directory == null || directory.list(invocation).stream().noneMatch(Invoker::isAvailable)) {
throw new IllegalStateException("no provider available across registries; abort before RPC");
} Try / catch
try {
return service.call(req);
} catch (RpcException e) {
if (e.isNoInvokerAvailableAfterFilter()) {
alert("all registries report zero available providers for " + service);
}
throw e;
} Prevention
- Verify providers are registered in at least one registry before issuing calls.
- Review router/filter configs that could exclude every provider.
- Wait for directory refresh after a registry reconnect before retrying.
When it happens
Trigger: All subscribed registries report zero available providers for the service; or every ClusterInvoker.isAvailable() returns false (providers deregistered or marked unhealthy) right as the call is dispatched; typically reached when zone routing is off or no zone was requested.
Common situations: Provider outage across every registry during a call; registry connectivity loss leaving stale empty invoker lists; subscribe-time filter excluding all providers; service not yet registered in any registry at consumer startup (race); network partition between consumer and all registries.
Related errors
- No registry instance in zone or no available providers in th
- 6
- No provider available in {invokers}
- Failed to invoke the method {methodName} in the service {get
- Failed to forking invoke provider {selected}, but no luck to
AI-assisted analysis of apache/dubbo@3a3043227f (2026-08-14).
Data as JSON: /api/errors/7af143b0ae011b6d.
Report an issue: GitHub.