diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java index 9cbedfbc47..6405c75eab 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java @@ -119,6 +119,18 @@ public class RegistryDirectory extends DynamicDirectory { @Override public void subscribe(URL url) { + + // Fail-fast detection protocol spi + String queryProtocols = this.queryMap.get(PROTOCOL_KEY); + if (StringUtils.isNotBlank(queryProtocols)) { + String[] acceptProtocols = queryProtocols.split(","); + for (String acceptProtocol : acceptProtocols) { + if (!moduleModel.getApplicationModel().getExtensionLoader(Protocol.class).hasExtension(acceptProtocol)) { + throw new IllegalStateException("No such extension org.apache.dubbo.rpc.Protocol by name " + acceptProtocol + ", please check whether related SPI module is missing"); + } + } + } + ApplicationModel applicationModel = url.getApplicationModel(); MetricsEventBus.post(RegistryEvent.toSubscribeEvent(applicationModel),() -> {