diff --git a/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java index 54b2ba470c22525275c72739cc2739627be4174d..c65c70c676bb3696039f6fecf9dac49497aeb696 100644 --- a/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java +++ b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java @@ -48,7 +48,9 @@ public class MulticastRegistry extends FailbackRegistry { // 日志输出 private static final Logger logger = LoggerFactory.getLogger(MulticastRegistry.class); - + + private static final int DEFAULT_MULTICAST_PORT = 1234; + private static final String REGISTER = "register"; private static final String UNREGISTER = "unregister"; @@ -70,7 +72,7 @@ public class MulticastRegistry extends FailbackRegistry { } try { mutilcastAddress = InetAddress.getByName(url.getHost()); - mutilcastSocket = new MulticastSocket(url.getPort()); + mutilcastSocket = new MulticastSocket(url.getPort() == 0 ? DEFAULT_MULTICAST_PORT : url.getPort()); mutilcastSocket.setLoopbackMode(false); mutilcastSocket.joinGroup(mutilcastAddress); Thread thread = new Thread(new Runnable() { @@ -299,4 +301,8 @@ public class MulticastRegistry extends FailbackRegistry { return notified; } + public MulticastSocket getMutilcastSocket() { + return mutilcastSocket; + } + } \ No newline at end of file diff --git a/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java b/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java index 3bd8cbec8253112da5d79052e2fe6b7f578f757c..3e1f8f0a87e8ca0e0de3d866ac60c97d3d4d0da3 100644 --- a/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java +++ b/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java @@ -18,11 +18,14 @@ package com.alibaba.dubbo.registry.multicast; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.net.MulticastSocket; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; +import junit.framework.Assert; + import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -107,4 +110,15 @@ public class MulticastRegistryTest { } + @Test + public void testDefaultPort() { + MulticastRegistry multicastRegistry = new MulticastRegistry(URL.valueOf("multicast://224.5.6.7")); + try { + MulticastSocket multicastSocket = multicastRegistry.getMutilcastSocket(); + Assert.assertEquals(1234, multicastSocket.getLocalPort()); + } finally { + multicastRegistry.destroy(); + } + } + } \ No newline at end of file diff --git a/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java b/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java index ca6d00be1239278a7b9029ff94747c59104dbe50..540b70ad37ce731ef66ed4d0dc322385d6e88229 100644 --- a/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java +++ b/dubbo-registry-zookeeper/src/main/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistry.java @@ -54,6 +54,8 @@ import com.alibaba.dubbo.rpc.RpcException; public class ZookeeperRegistry extends FailbackRegistry { private final static Logger logger = LoggerFactory.getLogger(ZookeeperRegistry.class); + + private final static int DEFAULT_ZOOKEEPER_PORT = 2181; private final static int DEFAULT_SESSION_TIMEOUT = 60 * 1000; @@ -151,14 +153,29 @@ public class ZookeeperRegistry extends FailbackRegistry { } } + static String appendDefaultPort(String address) { + if (address != null && address.length() > 0) { + int i = address.indexOf(':'); + if (i < 0) { + return address + ":" + DEFAULT_ZOOKEEPER_PORT; + } else if (Integer.parseInt(address.substring(i + 1)) == 0) { + return address.substring(0, i + 1) + DEFAULT_ZOOKEEPER_PORT; + } + } + return address; + } + private ZooKeeper createZookeeper() throws Exception { URL url = getUrl(); - String address = url.getAddress(); - String backup = url.getParameter(Constants.BACKUP_KEY); - if (backup != null && backup.length() > 0) { - address = address + "," + backup; + StringBuilder address = new StringBuilder(appendDefaultPort(url.getAddress())); + String[] backups = url.getParameter(Constants.BACKUP_KEY, new String[0]); + if (backups != null && backups.length > 0) { + for (String backup : backups) { + address.append(","); + address.append(appendDefaultPort(backup)); + } } - ZooKeeper zk = new ZooKeeper(address, url.getPositiveParameter( + ZooKeeper zk = new ZooKeeper(address.toString(), url.getPositiveParameter( Constants.TIMEOUT_KEY, DEFAULT_SESSION_TIMEOUT), new Watcher() { public void process(WatchedEvent event) { try { diff --git a/dubbo-registry-zookeeper/src/test/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryTest.java b/dubbo-registry-zookeeper/src/test/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryTest.java index a7baea3aac2826e598f5dc1ab56fe297405c0571..79f89a0cb3e63034e273e6830b184b11858ee40a 100644 --- a/dubbo-registry-zookeeper/src/test/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryTest.java +++ b/dubbo-registry-zookeeper/src/test/java/com/alibaba/dubbo/registry/zookeeper/ZookeeperRegistryTest.java @@ -15,6 +15,8 @@ */ package com.alibaba.dubbo.registry.zookeeper; +import junit.framework.Assert; + import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -55,6 +57,12 @@ public class ZookeeperRegistryTest { URL errorUrl = URL.valueOf("zookeeper://zookeeper/"); new ZookeeperRegistry(errorUrl); } + + @Test + public void testDefaultPort() { + Assert.assertEquals("10.20.153.10:2181", ZookeeperRegistry.appendDefaultPort("10.20.153.10:0")); + Assert.assertEquals("10.20.153.10:2181", ZookeeperRegistry.appendDefaultPort("10.20.153.10")); + } /** * Test method for {@link com.alibaba.dubbo.registry.support.injvm.InjvmRegistry#register(java.util.Map)}.