DUBBO-465 同样给Monitor单例缓存也加上group和version信息
diff --git a/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java b/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java
index 82198da..3a28b02 100644
--- a/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java
+++ b/dubbo-monitor/dubbo-monitor-api/src/main/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactroy.java
@@ -21,9 +21,11 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
+import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.monitor.Monitor;
import com.alibaba.dubbo.monitor.MonitorFactory;
+import com.alibaba.dubbo.monitor.MonitorService;
/**
* AbstractMonitorFactroy. (SPI, Singleton, ThreadSafe)
@@ -43,10 +45,11 @@
}
public Monitor getMonitor(URL url) {
+ url = url.setPath(MonitorService.class.getName()).addParameter(Constants.INTERFACE_KEY, MonitorService.class.getName());
+ String key = url.toServiceString();
LOCK.lock();
try {
- String uri = url.toIdentityString();
- Monitor monitor = MONITORS.get(uri);
+ Monitor monitor = MONITORS.get(key);
if (monitor != null) {
return monitor;
}
@@ -54,7 +57,7 @@
if (monitor == null) {
throw new IllegalStateException("Can not create monitor " + url);
}
- MONITORS.put(uri, monitor);
+ MONITORS.put(key, monitor);
return monitor;
} finally {
// 释放锁
diff --git a/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
new file mode 100644
index 0000000..c7da8e4
--- /dev/null
+++ b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 1999-2011 Alibaba Group.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.dubbo.monitor.support;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.utils.NetUtils;
+import com.alibaba.dubbo.monitor.Monitor;
+import com.alibaba.dubbo.monitor.MonitorFactory;
+
+/**
+ * AbstractMonitorFactoryTest
+ *
+ * @author william.liangf
+ */
+public class AbstractMonitorFactoryTest {
+
+ private MonitorFactory monitorFactory = new AbstractMonitorFactroy() {
+
+ protected Monitor createMonitor(final URL url) {
+ return new Monitor() {
+
+ public URL getUrl() {
+ return url;
+ }
+
+ public boolean isAvailable() {
+ return true;
+ }
+
+ public void destroy() {
+ }
+
+ public void collect(URL statistics) {
+ }
+
+ };
+ }
+ };
+
+ @Test
+ public void testMonitorFactoryCache() throws Exception {
+ URL url = URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostAddress() + ":2233");
+ Monitor monitor1 = monitorFactory.getMonitor(url);
+ Monitor monitor2 = monitorFactory.getMonitor(url);
+ Assert.assertEquals(monitor1, monitor2);
+ }
+
+ @Test
+ public void testMonitorFactoryIpCache() throws Exception {
+ Monitor monitor1 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostName() + ":2233"));
+ Monitor monitor2 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalAddress().getHostAddress() + ":2233"));
+ Assert.assertEquals(monitor1, monitor2);
+ }
+
+ @Test
+ public void testMonitorFactoryGroupCache() throws Exception {
+ Monitor monitor1 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":2233?group=aaa"));
+ Monitor monitor2 = monitorFactory.getMonitor(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":2233?group=bbb"));
+ Assert.assertNotSame(monitor1, monitor2);
+ }
+
+}
\ No newline at end of file