This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 3101a5d458 fix metadata service export port (#10055)
3101a5d458 is described below

commit 3101a5d458a4f820a660f0497770d920168c067d
Author: Young Hu <[email protected]>
AuthorDate: Fri Jul 15 09:14:18 2022 +0800

    fix metadata service export port (#10055)
---
 .../config/metadata/ConfigurableMetadataServiceExporter.java  | 11 +++++++++++
 .../MetadataServiceURLParamsMetadataCustomizerTest.java       |  3 ++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
index 568aae63dd..481fdd0564 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
@@ -97,6 +97,10 @@ public class ConfigurableMetadataServiceExporter {
         return 
applicationModel.getApplicationConfigManager().getApplication().get();
     }
 
+    private ProtocolConfig getProtocolConfig(String protocol) {
+        return 
applicationModel.getApplicationConfigManager().getProtocol(protocol).get();
+    }
+
     private ProtocolConfig generateMetadataProtocol() {
         // protocol always defaults to dubbo if not specified
         String specifiedProtocol = getSpecifiedProtocol();
@@ -115,10 +119,17 @@ public class ConfigurableMetadataServiceExporter {
                 Protocol protocol = 
applicationModel.getExtensionLoader(Protocol.class).getExtension(specifiedProtocol);
                 if (protocol != null && protocol.getServers() != null) {
                     Iterator<ProtocolServer> it = 
protocol.getServers().iterator();
+                    // metadata service may export before normal service 
export, it.hasNext() will return false.
+                    // so need use specified protocol port.
                     if (it.hasNext()) {
                         String addr = it.next().getAddress();
                         String rawPort = addr.substring(addr.indexOf(":") + 1);
                         protocolConfig.setPort(Integer.parseInt(rawPort));
+                    } else {
+                        Integer protocolPort = 
getProtocolConfig(specifiedProtocol).getPort();
+                        if (null != protocolPort && protocolPort != -1) {
+                            protocolConfig.setPort(protocolPort);
+                        }
                     }
                 }
             } catch (Exception e) {
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
index e3552fe011..76380f276e 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizerTest.java
@@ -26,6 +26,7 @@ import org.apache.dubbo.config.api.DemoService;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
 import org.apache.dubbo.registry.client.DefaultServiceInstance;
+import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import org.junit.jupiter.api.AfterEach;
@@ -49,7 +50,7 @@ import static 
org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataU
 public class MetadataServiceURLParamsMetadataCustomizerTest {
 
     public DefaultServiceInstance instance;
-    private URL metadataServiceURL = 
URL.valueOf("dubbo://10.225.12.124:20880/org.apache.dubbo.metadata.MetadataService"
 +
+    private URL metadataServiceURL = 
URL.valueOf("dubbo://10.225.12.124:2002/org.apache.dubbo.metadata.MetadataService"
 +
         
"?application=MetadataServiceURLParamsMetadataCustomizerTest&group=MetadataServiceURLParamsMetadataCustomizerTest"
 +
         
"&interface=org.apache.dubbo.metadata.MetadataService&side=provider&timestamp=1637573430740&version=1.0.0");
 

Reply via email to