[SCB-2378] support publish address configure different port than listen address (#2726)

diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java
index fb4ae57..5c78652 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/RegistrationManager.java
@@ -272,6 +272,12 @@
         .get();
     publicAddressSetting = publicAddressSetting.trim();
 
+    String publishPortKey = PUBLISH_PORT.replace("{transport_name}", schema);
+    int publishPortSetting = DynamicPropertyFactory.getInstance()
+        .getIntProperty(publishPortKey, 0)
+        .get();
+    int publishPort = publishPortSetting == 0 ? ipPort.getPort() : publishPortSetting;
+
     if (publicAddressSetting.isEmpty()) {
       InetSocketAddress socketAddress = ipPort.getSocketAddress();
       if (socketAddress.getAddress().isAnyLocalAddress()) {
@@ -282,8 +288,8 @@
         LOGGER.warn("address {}, auto select a host address to publish {}:{}, maybe not the correct one",
             socketAddress,
             host,
-            socketAddress.getPort());
-        return new IpPort(host, ipPort.getPort());
+            publishPort);
+        return new IpPort(host, publishPort);
       }
 
       return ipPort;
@@ -296,11 +302,7 @@
           .getHostAddress();
     }
 
-    String publishPortKey = PUBLISH_PORT.replace("{transport_name}", schema);
-    int publishPortSetting = DynamicPropertyFactory.getInstance()
-        .getIntProperty(publishPortKey, 0)
-        .get();
-    int publishPort = publishPortSetting == 0 ? ipPort.getPort() : publishPortSetting;
+
     return new IpPort(publicAddressSetting, publishPort);
   }