{"record":{"id":"7af143b0ae011b6d","repo":"apache/dubbo","slug":"no-provider-available-in-invokers-7af143","errorCode":null,"errorMessage":"No provider available in {invokers}","messagePattern":"No provider available in (.+?)","errorType":"exception","errorClass":"RpcException","httpStatus":null,"severity":"error","filePath":"dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/registry/ZoneAwareClusterInvoker.java","lineNumber":123,"sourceCode":"            }\n        }\n\n        // load balance among all registries, with registry weight count in.\n        Invoker<T> balancedInvoker = select(loadbalance, invocation, invokers, null);\n        if (balancedInvoker != null && balancedInvoker.isAvailable()) {\n            return balancedInvoker.invoke(invocation);\n        }\n\n        // If none of the invokers has a preferred signal or is picked by the loadbalancer, pick the first one\n        // available.\n        for (Invoker<T> invoker : invokers) {\n            ClusterInvoker<T> clusterInvoker = (ClusterInvoker<T>) invoker;\n            if (clusterInvoker.isAvailable()) {\n                return clusterInvoker.invoke(invocation);\n            }\n        }\n\n        throw new RpcException(\"No provider available in \" + invokers);\n    }\n}\n","sourceCodeStart":105,"sourceCodeEnd":126,"githubUrl":"https://github.com/apache/dubbo/blob/3a3043227f5571d25eb2889de5bca22f2914843b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/registry/ZoneAwareClusterInvoker.java#L105-L126","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: no providers visible in any registry\ntry { service.call(x); } catch (RpcException e) { /* unaware */ }\n\n// after: detect the no-provider condition and surface remediation\ntry {\n    return service.call(x);\n} catch (RpcException e) {\n    if (e.isNoInvokerAvailableAfterFilter()) {\n        alert(\"No providers in any registry for \" + service);\n    }\n    throw e;\n}","handlingStrategy":"validation","validationCode":"// Check directory has any available invoker before calling\nif (directory == null || directory.list(invocation).stream().noneMatch(Invoker::isAvailable)) {\n    throw new IllegalStateException(\"no provider available across registries; abort before RPC\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    return service.call(req);\n} catch (RpcException e) {\n    if (e.isNoInvokerAvailableAfterFilter()) {\n        alert(\"all registries report zero available providers for \" + service);\n    }\n    throw e;\n}","preventionTips":["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."],"tags":["cluster","zone-aware","no-provider","availability","multi-registry"],"backgroundTag":null,"analyzedSha":"3a3043227f5571d25eb2889de5bca22f2914843b","analyzedAt":"2026-08-14T00:43:19.853Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}