Skip to content

Commit fa8aabf

Browse files
panxiaojun233nzomkxia
authored andcommitted
metrics service (#3833)
* metrics service * bug fix * full method name * return type fix * return type fix * modify bug * bug fix * bug fix * add metrics message * bug fix * add config ip * code optimization
1 parent 68e5522 commit fa8aabf

File tree

21 files changed

+763
-292
lines changed

21 files changed

+763
-292
lines changed

dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,8 @@ public class Constants {
871871
public static final String METHOD = "method";
872872
public static final String DUBBO_GROUP = "dubbo";
873873
public static final String METRICS_KEY = "metrics";
874+
public static final String METRICS_PORT = "metrics.port";
875+
public static final String METRICS_PROTOCOL = "metrics.protocol";
874876

875877

876878
}

dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.apache.dubbo.common.Constants;
2020
import org.apache.dubbo.common.URL;
21+
import org.apache.dubbo.common.config.ConfigurationUtils;
2122
import org.apache.dubbo.common.logger.Logger;
2223
import org.apache.dubbo.common.logger.LoggerFactory;
2324

@@ -210,6 +211,15 @@ public static String filterLocalHost(String host) {
210211
return host;
211212
}
212213

214+
public static String getIpByConfig() {
215+
String configIp = ConfigurationUtils.getProperty(Constants.DUBBO_IP_TO_BIND);
216+
if (configIp != null) {
217+
return configIp;
218+
}
219+
220+
return getIpByHost(getLocalAddress().getHostName());
221+
}
222+
213223
/**
214224
* Find first valid IP from local network card
215225
*

dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,11 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
141141
* Disconnection events
142142
*/
143143
protected String ondisconnect;
144+
145+
/**
146+
* The metrics configuration
147+
*/
148+
protected MetricsConfig metrics;
144149
protected MetadataReportConfig metadataReportConfig;
145150

146151
protected ConfigCenterConfig configCenter;
@@ -825,4 +830,11 @@ public void setMetadataReportConfig(MetadataReportConfig metadataReportConfig) {
825830
this.metadataReportConfig = metadataReportConfig;
826831
}
827832

833+
public MetricsConfig getMetrics() {
834+
return metrics;
835+
}
836+
837+
public void setMetrics(MetricsConfig metrics) {
838+
this.metrics = metrics;
839+
}
828840
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.dubbo.config;
19+
20+
import org.apache.dubbo.common.Constants;
21+
import org.apache.dubbo.config.support.Parameter;
22+
23+
public class MetricsConfig extends AbstractConfig {
24+
25+
private static final long serialVersionUID = -9089919311611546383L;
26+
27+
private String port;
28+
private String protocol;
29+
30+
public MetricsConfig() {
31+
}
32+
33+
@Parameter(key = Constants.METRICS_PORT)
34+
public String getPort() {
35+
return port;
36+
}
37+
38+
public void setPort(String port) {
39+
this.port = port;
40+
}
41+
42+
@Parameter(key = Constants.METRICS_PROTOCOL)
43+
public String getProtocol() {
44+
return protocol;
45+
}
46+
47+
public void setProtocol(String protocol) {
48+
this.protocol = protocol;
49+
}
50+
51+
}

dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ private void init() {
260260
Map<String, String> map = new HashMap<String, String>();
261261

262262
map.put(Constants.SIDE_KEY, Constants.CONSUMER_SIDE);
263+
263264
appendRuntimeParameters(map);
264265
if (!isGeneric()) {
265266
String revision = Version.getVersion(interfaceClass, version);
@@ -276,6 +277,7 @@ private void init() {
276277
}
277278
}
278279
map.put(Constants.INTERFACE_KEY, interfaceName);
280+
appendParameters(map, metrics);
279281
appendParameters(map, application);
280282
appendParameters(map, module);
281283
appendParameters(map, consumer, Constants.DEFAULT_KEY);

dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,9 @@ private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List<URL> r
426426

427427
Map<String, String> map = new HashMap<String, String>();
428428
map.put(Constants.SIDE_KEY, Constants.PROVIDER_SIDE);
429+
429430
appendRuntimeParameters(map);
431+
appendParameters(map, metrics);
430432
appendParameters(map, application);
431433
appendParameters(map, module);
432434
appendParameters(map, provider, Constants.DEFAULT_KEY);

dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.dubbo.config.MonitorConfig;
2828
import org.apache.dubbo.config.ReferenceConfig;
2929
import org.apache.dubbo.config.RegistryConfig;
30+
import org.apache.dubbo.config.MetricsConfig;
3031
import org.apache.dubbo.config.annotation.Reference;
3132
import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
3233
import org.apache.dubbo.config.support.Parameter;
@@ -216,6 +217,22 @@ public void afterPropertiesSet() throws Exception {
216217
}
217218
}
218219

220+
if (getMetrics() == null) {
221+
Map<String, MetricsConfig> metricsConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, MetricsConfig.class, false, false);
222+
if (metricsConfigMap != null && metricsConfigMap.size() > 0) {
223+
MetricsConfig metricsConfig = null;
224+
for (MetricsConfig config : metricsConfigMap.values()) {
225+
if (metricsConfig != null) {
226+
throw new IllegalStateException("Duplicate metrics configs: " + metricsConfig + " and " + config);
227+
}
228+
metricsConfig = config;
229+
}
230+
if (metricsConfig != null) {
231+
setMetrics(metricsConfig);
232+
}
233+
}
234+
}
235+
219236
if (shouldInit()) {
220237
getObject();
221238
}

dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@
1919
import org.apache.dubbo.common.Constants;
2020
import org.apache.dubbo.common.utils.CollectionUtils;
2121
import org.apache.dubbo.common.utils.StringUtils;
22-
import org.apache.dubbo.config.ApplicationConfig;
23-
import org.apache.dubbo.config.ConfigCenterConfig;
24-
import org.apache.dubbo.config.MetadataReportConfig;
25-
import org.apache.dubbo.config.ModuleConfig;
26-
import org.apache.dubbo.config.MonitorConfig;
2722
import org.apache.dubbo.config.ProtocolConfig;
2823
import org.apache.dubbo.config.ProviderConfig;
29-
import org.apache.dubbo.config.RegistryConfig;
3024
import org.apache.dubbo.config.ServiceConfig;
25+
import org.apache.dubbo.config.MetricsConfig;
26+
import org.apache.dubbo.config.RegistryConfig;
27+
import org.apache.dubbo.config.ConfigCenterConfig;
28+
import org.apache.dubbo.config.MetadataReportConfig;
29+
import org.apache.dubbo.config.MonitorConfig;
30+
import org.apache.dubbo.config.ModuleConfig;
31+
import org.apache.dubbo.config.ApplicationConfig;
3132
import org.apache.dubbo.config.annotation.Service;
3233
import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
3334
import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
@@ -256,6 +257,22 @@ public void afterPropertiesSet() throws Exception {
256257
}
257258
}
258259

260+
if (getMetrics() == null) {
261+
Map<String, MetricsConfig> metricsConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, MetricsConfig.class, false, false);
262+
if (metricsConfigMap != null && metricsConfigMap.size() > 0) {
263+
MetricsConfig metricsConfig = null;
264+
for (MetricsConfig config : metricsConfigMap.values()) {
265+
if (metricsConfig != null) {
266+
throw new IllegalStateException("Duplicate metrics configs: " + metricsConfig + " and " + config);
267+
}
268+
metricsConfig = config;
269+
}
270+
if (metricsConfig != null) {
271+
setMetrics(metricsConfig);
272+
}
273+
}
274+
}
275+
259276
if (StringUtils.isEmpty(getProtocolIds())) {
260277
if (getProvider() != null && StringUtils.isNotEmpty(getProvider().getProtocolIds())) {
261278
setProtocolIds(getProvider().getProtocolIds());
@@ -352,4 +369,4 @@ protected Class getServiceClass(T ref) {
352369
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
353370
this.applicationEventPublisher = applicationEventPublisher;
354371
}
355-
}
372+
}

dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@
1717
package org.apache.dubbo.config.spring.schema;
1818

1919
import org.apache.dubbo.common.Version;
20+
2021
import org.apache.dubbo.config.ApplicationConfig;
21-
import org.apache.dubbo.config.ConsumerConfig;
2222
import org.apache.dubbo.config.MetadataReportConfig;
2323
import org.apache.dubbo.config.ModuleConfig;
24+
import org.apache.dubbo.config.RegistryConfig;
2425
import org.apache.dubbo.config.MonitorConfig;
25-
import org.apache.dubbo.config.ProtocolConfig;
26+
import org.apache.dubbo.config.MetricsConfig;
2627
import org.apache.dubbo.config.ProviderConfig;
27-
import org.apache.dubbo.config.RegistryConfig;
28+
import org.apache.dubbo.config.ConsumerConfig;
29+
import org.apache.dubbo.config.ProtocolConfig;
2830
import org.apache.dubbo.config.spring.ConfigCenterBean;
2931
import org.apache.dubbo.config.spring.ReferenceBean;
3032
import org.apache.dubbo.config.spring.ServiceBean;
@@ -50,6 +52,7 @@ public void init() {
5052
registerBeanDefinitionParser("config-center", new DubboBeanDefinitionParser(ConfigCenterBean.class, true));
5153
registerBeanDefinitionParser("metadata-report", new DubboBeanDefinitionParser(MetadataReportConfig.class, true));
5254
registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));
55+
registerBeanDefinitionParser("metrics", new DubboBeanDefinitionParser(MetricsConfig.class, true));
5356
registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));
5457
registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));
5558
registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));

dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,19 @@
773773
</xsd:attribute>
774774
</xsd:complexType>
775775

776+
<xsd:complexType name="metricsType">
777+
<xsd:attribute name="port" type="xsd:string" use="required">
778+
<xsd:annotation>
779+
<xsd:documentation><![CDATA[ The metrics service port. ]]></xsd:documentation>
780+
</xsd:annotation>
781+
</xsd:attribute>
782+
<xsd:attribute name="protocol" type="xsd:string" use="required">
783+
<xsd:annotation>
784+
<xsd:documentation><![CDATA[ The metrics service protocol. ]]></xsd:documentation>
785+
</xsd:annotation>
786+
</xsd:attribute>
787+
</xsd:complexType>
788+
776789
<xsd:complexType name="methodType">
777790
<xsd:complexContent>
778791
<xsd:extension base="abstractMethodType">
@@ -1459,4 +1472,15 @@
14591472
</xsd:annotation>
14601473
</xsd:element>
14611474

1475+
<xsd:element name="metrics" type="metricsType">
1476+
<xsd:annotation>
1477+
<xsd:documentation><![CDATA[ The metrics service ]]></xsd:documentation>
1478+
<xsd:appinfo>
1479+
<tool:annotation>
1480+
<tool:exports type="org.apache.dubbo.config.MetricsConfig"/>
1481+
</tool:annotation>
1482+
</xsd:appinfo>
1483+
</xsd:annotation>
1484+
</xsd:element>
1485+
14621486
</xsd:schema>

0 commit comments

Comments
 (0)