提交 b410f37c 编写于 作者: W william.liangf

修改monitor配置

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@137 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 bbde4bb7
......@@ -17,7 +17,6 @@ package com.alibaba.dubbo.config;
import java.io.InputStream;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URLEncoder;
......@@ -28,11 +27,8 @@ import java.util.regex.Pattern;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.monitor.MonitorService;
import com.alibaba.dubbo.rpc.RpcConstants;
/**
* AbstractConfig
......@@ -93,35 +89,6 @@ public abstract class AbstractConfig implements Serializable {
return properties;
}
private static final Pattern GROUP_AND_VERION = Pattern.compile("^[\\-.0-9_a-zA-Z]+(\\:[\\-.0-9_a-zA-Z]+)?$");
protected static String convertMonitor(String monitor, URL registry) {
if (monitor == null || monitor.length() == 0) {
return null;
}
if (GROUP_AND_VERION.matcher(monitor).matches()) {
String group;
String version;
int i = monitor.indexOf(':');
if (i > 0) {
group = monitor.substring(0, i);
version = monitor.substring(i + 1);
} else {
group = monitor;
version = null;
}
monitor = registry.setProtocol("dubbo").addParameter(Constants.MONITOR_KEY, registry.getProtocol())
.addParameterAndEncoded(RpcConstants.REFER_KEY, "group=" + group
+ (version == null || version.length() == 0 ? "" : "&version=" + version)
+ "&interface=" + MonitorService.class.getName()).toFullString();
}
try {
return URLEncoder.encode(monitor, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
protected static void appendParameters(Map<String, String> parameters, Object config) {
appendParameters(parameters, config, null);
}
......
......@@ -24,6 +24,8 @@ import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.Version;
import com.alibaba.dubbo.common.utils.NetUtils;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.monitor.MonitorService;
import com.alibaba.dubbo.registry.RegistryService;
import com.alibaba.dubbo.registry.support.UrlUtils;
import com.alibaba.dubbo.rpc.Filter;
......@@ -51,7 +53,7 @@ public abstract class AbstractReferenceConfig extends AbstractMethodConfig {
protected String mock;
// 服务监控
protected String monitor;
protected MonitorConfig monitor;
// 代理类型
protected String proxy;
......@@ -140,7 +142,7 @@ public abstract class AbstractReferenceConfig extends AbstractMethodConfig {
}
}
}
protected List<URL> loadRegistries() {
checkRegistry();
List<URL> registryList = new ArrayList<URL>();
......@@ -164,6 +166,26 @@ public abstract class AbstractReferenceConfig extends AbstractMethodConfig {
}
return registryList;
}
protected URL loadMonitor(URL registryURL) {
if (monitor == null) {
return null;
}
Map<String, String> map = new HashMap<String, String>();
map.put(Constants.INTERFACE_KEY, MonitorService.class.getName());
appendParameters(map, monitor);
if (monitor.getAddress() != null || monitor.getAddress().length() > 0) {
if (! map.containsKey("protocol")) {
map.put("protocol", "dubbo");
}
return UrlUtils.parseURL(monitor.getAddress(), map);
} else if (monitor.getProtocol() != null || monitor.getProtocol().length() > 0) {
return new URL(monitor.getProtocol(), NetUtils.getLocalHost(), 0, MonitorService.class.getName(), map);
} else if (registryURL != null) {
return registryURL.setProtocol("dubbo").addParameter(Constants.MONITOR_KEY, registryURL.getProtocol()).addParameterAndEncoded(RpcConstants.REFER_KEY, StringUtils.toQueryString(map));
}
return null;
}
/**
* @deprecated Replace to <code>getStub()</code>
......@@ -300,14 +322,18 @@ public abstract class AbstractReferenceConfig extends AbstractMethodConfig {
this.registries = (List<RegistryConfig>)registries;
}
public String getMonitor() {
public MonitorConfig getMonitor() {
return monitor;
}
public void setMonitor(String monitor) {
public void setMonitor(MonitorConfig monitor) {
this.monitor = monitor;
}
public void setMonitor(String monitor) {
this.monitor = new MonitorConfig(monitor);
}
public String getOwner() {
return owner;
}
......
......@@ -15,6 +15,9 @@
*/
package com.alibaba.dubbo.config;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.dubbo.common.Constants;
......@@ -42,8 +45,11 @@ public class ApplicationConfig extends AbstractConfig {
// 环境,如:dev/test/run
private String environment;
// 注册中心
protected List<RegistryConfig> registries;
// 服务监控
protected String monitor;
private MonitorConfig monitor;
public ApplicationConfig() {
}
......@@ -103,14 +109,37 @@ public class ApplicationConfig extends AbstractConfig {
this.environment = environment;
}
public String getMonitor() {
public RegistryConfig getRegistry() {
return registries == null || registries.size() == 0 ? null : registries.get(0);
}
public void setRegistry(RegistryConfig registry) {
List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);
registries.add(registry);
this.registries = registries;
}
public List<RegistryConfig> getRegistries() {
return registries;
}
@SuppressWarnings({ "unchecked" })
public void setRegistries(List<? extends RegistryConfig> registries) {
this.registries = (List<RegistryConfig>)registries;
}
public MonitorConfig getMonitor() {
return monitor;
}
public void setMonitor(String monitor) {
public void setMonitor(MonitorConfig monitor) {
this.monitor = monitor;
}
public void setMonitor(String monitor) {
this.monitor = new MonitorConfig(monitor);
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder("<dubbo:application");
......
......@@ -26,8 +26,26 @@ public class MonitorConfig implements Serializable {
private static final long serialVersionUID = -1184681514659198203L;
private String protocol;
private String address;
private String username;
private String password;
private String group;
private String version;
public MonitorConfig() {
}
public MonitorConfig(String address) {
this.address = address;
}
@Parameter(excluded = true)
public String getAddress() {
return address;
}
......@@ -36,4 +54,47 @@ public class MonitorConfig implements Serializable {
this.address = address;
}
@Parameter(excluded = true)
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
@Parameter(excluded = true)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Parameter(excluded = true)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
\ No newline at end of file
......@@ -190,6 +190,17 @@ public class ReferenceConfig<T> extends AbstractConsumerConfig {
if (registries == null) {
registries = consumer.getRegistries();
}
if (monitor == null) {
monitor = consumer.getMonitor();
}
}
if (application != null) {
if (registries == null) {
registries = application.getRegistries();
}
if (monitor == null) {
monitor = application.getMonitor();
}
}
checkApplication();
Map<String, String> map = new HashMap<String, String>();
......@@ -282,9 +293,9 @@ public class ReferenceConfig<T> extends AbstractConsumerConfig {
List<URL> us = loadRegistries();
if (us != null && us.size() > 0) {
for (URL u : us) {
String monitor = convertMonitor(map.get(Constants.MONITOR_KEY), u);
if (monitor != null && monitor.length() > 0) {
map.put(Constants.MONITOR_KEY, monitor);
URL monitorUrl = loadMonitor(u);
if (monitorUrl != null) {
map.put(Constants.MONITOR_KEY, URL.encode(monitorUrl.toFullString()));
}
urls.add(u.addParameterAndEncoded(RpcConstants.REFER_KEY, StringUtils.toQueryString(map)));
}
......
......@@ -129,10 +129,21 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
if (registries == null) {
registries = provider.getRegistries();
}
if (monitor == null) {
monitor = provider.getMonitor();
}
if (protocols == null) {
protocols = provider.getProtocols();
}
}
if (application != null) {
if (registries == null) {
registries = application.getRegistries();
}
if (monitor == null) {
monitor = application.getMonitor();
}
}
if (ref instanceof GenericService) {
interfaceClass = GenericService.class;
generic = true;
......@@ -423,8 +434,11 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
}
if (registryURLs != null && registryURLs.size() > 0) {
for (URL registryURL : registryURLs) {
String providerURL = url.addParameter("enabled", String.valueOf(ready)).addParameter(Constants.MONITOR_KEY,
convertMonitor(url.getParameter(Constants.MONITOR_KEY), registryURL)).toFullString();
URL monitorUrl = loadMonitor(registryURL);
if (monitorUrl != null) {
url = url.addParameterAndEncoded(Constants.MONITOR_KEY, monitorUrl.toFullString());
}
String providerURL = url.addParameter("enabled", String.valueOf(ready)).toFullString();
if (logger.isInfoEnabled()) {
logger.info("Register dubbo service " + interfaceClass.getName() + " url " + providerURL + " to registry " + registryURL);
}
......
......@@ -89,7 +89,8 @@ public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean,
}
}
if (getRegistries() == null || getRegistries().size() == 0
&& (getConsumer() == null || getConsumer().getRegistries() == null || getConsumer().getRegistries().size() == 0)) {
&& (getConsumer() == null || getConsumer().getRegistries() == null || getConsumer().getRegistries().size() == 0)
&& (getApplication() == null || getApplication().getRegistries() == null || getApplication().getRegistries().size() == 0)) {
Map<String, RegistryConfig> registryConfigMap = applicationContext == null ? null : applicationContext.getBeansOfType(RegistryConfig.class, false, false);
if (registryConfigMap != null && registryConfigMap.size() > 0) {
Collection<RegistryConfig> registryConfigs = registryConfigMap.values();
......@@ -99,14 +100,15 @@ public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean,
}
}
if (getMonitor() == null
&& (getConsumer() == null || getConsumer().getMonitor() == null)) {
&& (getConsumer() == null || getConsumer().getMonitor() == null)
&& (getApplication() == null || getApplication().getMonitor() == null)) {
Map<String, MonitorConfig> monitorConfigMap = applicationContext == null ? null : applicationContext.getBeansOfType(MonitorConfig.class, false, false);
if (monitorConfigMap != null && monitorConfigMap.size() > 0) {
if (monitorConfigMap.size() > 1) {
throw new IllegalStateException("Duplicate monitor configs: " + monitorConfigMap.values());
}
MonitorConfig monitorConfig = monitorConfigMap.values().iterator().next();
super.setMonitor(monitorConfig.getAddress());
super.setMonitor(monitorConfig);
}
}
if (isInjvm() == null
......
......@@ -125,7 +125,8 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
}
}
if (getRegistries() == null || getRegistries().size() == 0
&& (getProvider() == null || getProvider().getRegistries() == null || getProvider().getRegistries().size() == 0)) {
&& (getProvider() == null || getProvider().getRegistries() == null || getProvider().getRegistries().size() == 0)
&& (getApplication() == null || getApplication().getRegistries() == null || getApplication().getRegistries().size() == 0)) {
Map<String, RegistryConfig> registryConfigMap = applicationContext == null ? null : applicationContext.getBeansOfType(RegistryConfig.class, false, false);
if (registryConfigMap != null && registryConfigMap.size() > 0) {
Collection<RegistryConfig> registryConfigs = registryConfigMap.values();
......@@ -135,14 +136,15 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
}
}
if (getMonitor() == null
&& (getProvider() == null || getProvider().getMonitor() == null)) {
&& (getProvider() == null || getProvider().getMonitor() == null)
&& (getApplication() == null || getApplication().getMonitor() == null)) {
Map<String, MonitorConfig> monitorConfigMap = applicationContext == null ? null : applicationContext.getBeansOfType(MonitorConfig.class, false, false);
if (monitorConfigMap != null && monitorConfigMap.size() > 0) {
if (monitorConfigMap.size() > 1) {
throw new IllegalStateException("Duplicate monitor configs: " + monitorConfigMap.values());
}
MonitorConfig monitorConfig = monitorConfigMap.values().iterator().next();
super.setMonitor(monitorConfig.getAddress());
super.setMonitor(monitorConfig);
}
}
if ((getProtocols() == null || getProtocols().size() == 0)
......
......@@ -15,33 +15,35 @@
*/
package com.alibaba.dubbo.config.spring.schema;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Date;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.config.TypedStringValue;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.config.ArgumentConfig;
import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.rpc.Protocol;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Date;
import java.util.regex.Pattern;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.config.TypedStringValue;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.config.ArgumentConfig;
import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.MonitorConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.rpc.Protocol;
/**
* AbstractBeanDefinitionParser
......@@ -183,6 +185,11 @@ public class DubboBeanDefinitionParser implements BeanDefinitionParser {
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName(value);
reference = protocol;
} else if ("monitor".equals(property)
&& (! parserContext.getRegistry().containsBeanDefinition(value)
|| ! MonitorConfig.class.getName().equals(parserContext.getRegistry().getBeanDefinition(value).getBeanClassName()))) {
// 兼容旧版本配置
reference = convertMonitor(value);
} else if ("onreturn".equals(property)) {
int index = value.lastIndexOf(".");
String returnRef = value.substring(0, index);
......@@ -194,7 +201,7 @@ public class DubboBeanDefinitionParser implements BeanDefinitionParser {
String throwRef = value.substring(0, index);
String throwMethod = value.substring(index + 1);
reference = new RuntimeBeanReference(throwRef);
beanDefinition.getPropertyValues().addPropertyValue("onthrowMethod", throwMethod);
beanDefinition.getPropertyValues().addPropertyValue("onthrowMethod", throwMethod);
} else {
if ("ref".equals(property) && parserContext.getRegistry().containsBeanDefinition(value)) {
BeanDefinition refBean = parserContext.getRegistry().getBeanDefinition(value);
......@@ -212,7 +219,32 @@ public class DubboBeanDefinitionParser implements BeanDefinitionParser {
}
}
return beanDefinition;
}
}
private static final Pattern GROUP_AND_VERION = Pattern.compile("^[\\-.0-9_a-zA-Z]+(\\:[\\-.0-9_a-zA-Z]+)?$");
protected static MonitorConfig convertMonitor(String monitor) {
if (monitor == null || monitor.length() == 0) {
return null;
}
if (GROUP_AND_VERION.matcher(monitor).matches()) {
String group;
String version;
int i = monitor.indexOf(':');
if (i > 0) {
group = monitor.substring(0, i);
version = monitor.substring(i + 1);
} else {
group = monitor;
version = null;
}
MonitorConfig monitorConfig = new MonitorConfig();
monitorConfig.setGroup(group);
monitorConfig.setVersion(version);
return monitorConfig;
}
return null;
}
private static boolean isPrimitive(Class<?> cls) {
return cls.isPrimitive() || cls == Boolean.class || cls == Byte.class
......
......@@ -44,6 +44,11 @@
<xsd:documentation><![CDATA[ The application environment, eg: dev/test/run ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="registry" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[ The application registry. ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="monitor" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[ The application monitor. ]]></xsd:documentation>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册