{"record":{"id":"c8f65ee56ca61eef","repo":"apache/dubbo","slug":"6","errorCode":"6","errorMessage":"Failed to invoke the method {RpcUtils.getMethodName(invocation)} in the service {getInterface().getName()}. No provider available for the service {getDirectory().getConsumerUrl().getServiceKey()} from registry {getDirectory()} on the consumer {NetUtils.getLocalHost()} using the dubbo version {Version.getVersion()}. Please check if the providers have been started and registered.","messagePattern":"Failed to invoke the method (.+?) in the service (.+?)\\. No provider available for the service (.+?) from registry (.+?) on the consumer (.+?) using the dubbo version (.+?)\\. Please check if the providers have been started and registered\\.","errorType":"exception","errorClass":"RpcException","httpStatus":null,"severity":"error","filePath":"dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java","lineNumber":388,"sourceCode":"    }\n\n    protected void checkWhetherDestroyed() {\n        if (destroyed.get()) {\n            throw new RpcException(\n                    \"Rpc cluster invoker for \" + getInterface() + \" on consumer \" + NetUtils.getLocalHost()\n                            + \" use dubbo version \" + Version.getVersion()\n                            + \" is now destroyed! Can not invoke any more.\");\n        }\n    }\n\n    @Override\n    public String toString() {\n        return getInterface() + \" -> \" + getUrl().toString();\n    }\n\n    protected void checkInvokers(List<Invoker<T>> invokers, Invocation invocation) {\n        if (CollectionUtils.isEmpty(invokers)) {\n            throw new RpcException(\n                    RpcException.NO_INVOKER_AVAILABLE_AFTER_FILTER,\n                    \"Failed to invoke the method \"\n                            + RpcUtils.getMethodName(invocation) + \" in the service \"\n                            + getInterface().getName()\n                            + \". No provider available for the service \"\n                            + getDirectory().getConsumerUrl().getServiceKey()\n                            + \" from registry \" + getDirectory()\n                            + \" on the consumer \" + NetUtils.getLocalHost()\n                            + \" using the dubbo version \" + Version.getVersion()\n                            + \". Please check if the providers have been started and registered.\");\n        }\n    }\n\n    protected Result invokeWithContext(Invoker<T> invoker, Invocation invocation) {\n        Invoker<T> originInvoker = setContext(invoker);\n        Result result;\n        try {\n            if (ProfilerSwitch.isEnableSimpleProfiler()) {","sourceCodeStart":370,"sourceCodeEnd":406,"githubUrl":"https://github.com/apache/dubbo/blob/3a3043227f5571d25eb2889de5bca22f2914843b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java#L370-L406","documentation":"Thrown by AbstractClusterInvoker.checkInvokers() with code NO_INVOKER_AVAILABLE_AFTER_FILTER (6) when the invoker list passed to a cluster invoke is empty. This means routing/filtering removed all providers — there is no provider reachable for the service after the router chain ran.","triggerScenarios":"After the directory lists and the router chain filters, zero invokers remain. Caused by: no providers registered for the service, all providers filtered out by condition/script/affinity/mesh routing rules, providers excluded by the connectivity (isAvailable) filter, or a registry/address-notification problem.","commonSituations":"Provider not started or not registered; registry connectivity issue so the consumer sees no addresses; an overly restrictive routing rule that excludes all providers; provider group/version mismatch; all providers marked unavailable by the health checker.","solutions":["Verify providers are started and registered in the registry for the exact service key (interface + group + version).","Inspect the router snapshot (enable dubbo router snapshot logging) to see which router removed all invokers, then relax/fix that rule.","Confirm consumer group/version/query conditions match the registered providers.","Check registry health and that address notifications actually reached the consumer (RegistryDirectory logs)."],"exampleFix":"# diagnose: enable router snapshot to find which rule empties the list\n# -Ddubbo.rpc.router.snapshot=true\n# then check: are providers registered? do group/version match?\n# common fix: align consumer group/version with provider\n@DubboReference(group = \"order\", version = \"1.0.0\")\nprivate OrderService orderService;","handlingStrategy":"try-catch","validationCode":"// Pre-flight: confirm providers are present for the service key\nDirectory<T> dir = clusterInvoker.getDirectory();\nif (CollectionUtils.isEmpty(dir.getAllInvokers())) {\n    log.warn(\"No providers registered for \" + dir.getConsumerUrl().getServiceKey());\n    return fallback();\n}\nreturn clusterInvoker.invoke(invocation);","typeGuard":null,"tryCatchPattern":"try {\n    return service.foo();\n} catch (RpcException e) {\n    if (e.getCode() == RpcException.NO_INVOKER_AVAILABLE_AFTER_FILTER) {\n        // no provider after routing: degrade or alert; check registry/router rules\n        log.error(\"No provider for \" + e.getMessage());\n        return fallback();\n    }\n    throw e;\n}","preventionTips":["Verify providers are registered (interface + group + version) before relying on a consumer.","Enable router snapshot logging to see which router empties the list.","Keep routing rules permissive enough that at least one provider remains."],"tags":["cluster","no-provider","routing","registry","consumer"],"backgroundTag":null,"analyzedSha":"3a3043227f5571d25eb2889de5bca22f2914843b","analyzedAt":"2026-08-14T00:43:19.853Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}