Skip to content

Commit 8a09ec8

Browse files
Rawvenliujiahui
authored andcommitted
feat(): refactor
1 parent 2ec4630 commit 8a09ec8

File tree

57 files changed

+1111
-1355
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1111
-1355
lines changed

apollo-client/src/main/java/com/ctrip/framework/apollo/internals/ConfigMonitorInitializer.java

Lines changed: 43 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,14 @@
2020

2121
import com.ctrip.framework.apollo.build.ApolloInjector;
2222
import com.ctrip.framework.apollo.core.utils.ClassLoaderUtil;
23-
import com.ctrip.framework.apollo.monitor.api.ConfigMonitor;
24-
import com.ctrip.framework.apollo.monitor.internal.DefaultConfigMonitor;
2523
import com.ctrip.framework.apollo.monitor.internal.exporter.AbstractApolloClientMetricsExporter;
24+
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporter;
2625
import com.ctrip.framework.apollo.monitor.internal.jmx.ApolloClientJmxMBeanRegister;
27-
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListener;
28-
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListenerManager;
26+
import com.ctrip.framework.apollo.monitor.internal.ApolloClientMonitorContext;
2927
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientBootstrapArgsApi;
3028
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientExceptionApi;
3129
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientNamespaceApi;
3230
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientThreadPoolApi;
33-
import com.ctrip.framework.apollo.monitor.internal.listener.DefaultApolloClientMonitorEventListenerManager;
34-
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporter;
3531
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporterFactory;
3632
import com.ctrip.framework.apollo.monitor.internal.tracer.ApolloClientMonitorMessageProducer;
3733
import com.ctrip.framework.apollo.monitor.internal.tracer.ApolloClientMessageProducerComposite;
@@ -41,91 +37,75 @@
4137
import com.ctrip.framework.apollo.tracer.spi.MessageProducer;
4238
import com.ctrip.framework.apollo.util.ConfigUtil;
4339
import com.ctrip.framework.foundation.internals.ServiceBootstrap;
44-
import com.google.common.collect.Lists;
4540
import java.util.List;
46-
import org.slf4j.Logger;
47-
import org.slf4j.LoggerFactory;
4841

4942
/**
5043
* ConfigMonitorInitializer initializes the Apollo Config Monitor.
5144
*/
5245
public class ConfigMonitorInitializer {
5346

54-
private static final Logger logger = LoggerFactory.getLogger(ConfigMonitorInitializer.class);
5547
protected static boolean hasInitialized = false;
56-
private static ConfigUtil CONFIG_UTIL = ApolloInjector.getInstance(ConfigUtil.class);
48+
private static ConfigUtil m_configUtil = ApolloInjector.getInstance(ConfigUtil.class);
49+
private static ApolloClientMonitorContext monitorContext = ApolloInjector.getInstance(
50+
ApolloClientMonitorContext.class);
5751

5852
public static void initialize() {
59-
if (CONFIG_UTIL.getClientMonitorEnabled() && !hasInitialized) {
60-
hasInitialized = true;
61-
logger.debug("Initializing ConfigMonitor");
62-
DefaultApolloClientMonitorEventListenerManager manager = initializeMetricsEventListenerManager();
63-
List<ApolloClientMonitorEventListener> collectors = initializeCollectors(manager);
64-
ApolloClientMetricsExporter metricsExporter = initializeMetricsExporter(collectors);
65-
initializeJmxMonitoring(collectors);
66-
initializeConfigMonitor(collectors, metricsExporter);
67-
logger.debug("ConfigMonitor initialized successfully.");
53+
if (m_configUtil.isClientMonitorEnabled() && !hasInitialized) {
54+
synchronized (ConfigMonitorInitializer.class) {
55+
if (!hasInitialized) {
56+
doInit();
57+
hasInitialized = true;
58+
}
59+
}
6860
}
6961
}
7062

71-
protected static DefaultApolloClientMonitorEventListenerManager initializeMetricsEventListenerManager() {
72-
return (DefaultApolloClientMonitorEventListenerManager) ApolloInjector.getInstance(
73-
ApolloClientMonitorEventListenerManager.class);
63+
private static void doInit() {
64+
initializeMetricsEventListener();
65+
initializeMetricsExporter();
66+
initializeJmxMonitoring();
67+
hasInitialized = true;
7468
}
75-
76-
protected static void initializeJmxMonitoring(List<ApolloClientMonitorEventListener> collectors) {
77-
if (CONFIG_UTIL.getClientMonitorJmxEnabled()) {
78-
collectors.forEach(metricsCollector ->
69+
70+
71+
private static void initializeJmxMonitoring() {
72+
if (m_configUtil.isClientMonitorJmxEnabled()) {
73+
monitorContext.getCollectors().forEach(metricsCollector ->
7974
ApolloClientJmxMBeanRegister.register(
80-
MBEAN_NAME + metricsCollector.mBeanName(), metricsCollector)
75+
MBEAN_NAME + metricsCollector.getName(), metricsCollector)
8176
);
8277
}
8378
}
8479

85-
protected static List<ApolloClientMonitorEventListener> initializeCollectors(
86-
DefaultApolloClientMonitorEventListenerManager manager) {
87-
80+
private static void initializeMetricsEventListener() {
8881
DefaultConfigManager configManager = (DefaultConfigManager) ApolloInjector.getInstance(
8982
ConfigManager.class);
90-
91-
List<ApolloClientMonitorEventListener> collectors = Lists.newArrayList(
92-
new DefaultApolloClientExceptionApi(),
93-
new DefaultApolloClientNamespaceApi(configManager.m_configs, configManager.m_configFiles),
94-
new DefaultApolloClientThreadPoolApi(RemoteConfigRepository.m_executorService,
95-
AbstractConfig.m_executorService, AbstractConfigFile.m_executorService,
96-
AbstractApolloClientMetricsExporter.m_executorService),
97-
new DefaultApolloClientBootstrapArgsApi(CONFIG_UTIL)
98-
);
99-
100-
manager.setCollectors(collectors);
101-
return collectors;
83+
monitorContext.setApolloClientBootstrapArgsMonitorApi(new DefaultApolloClientBootstrapArgsApi(
84+
m_configUtil));
85+
monitorContext.setApolloClientExceptionMonitorApi(new DefaultApolloClientExceptionApi());
86+
monitorContext.setApolloClientNamespaceMonitorApi(new DefaultApolloClientNamespaceApi(
87+
configManager.m_configs, configManager.m_configFiles));
88+
monitorContext.setApolloClientThreadPoolMonitorApi(new DefaultApolloClientThreadPoolApi(
89+
RemoteConfigRepository.m_executorService,
90+
AbstractConfig.m_executorService, AbstractConfigFile.m_executorService,
91+
AbstractApolloClientMetricsExporter.m_executorService));
10292
}
10393

104-
protected static ApolloClientMetricsExporter initializeMetricsExporter(
105-
List<ApolloClientMonitorEventListener> collectors) {
94+
private static void initializeMetricsExporter(
95+
) {
10696
ApolloClientMetricsExporterFactory exporterFactory = ApolloInjector.getInstance(
10797
ApolloClientMetricsExporterFactory.class);
108-
return exporterFactory.getMetricsReporter(collectors);
109-
}
110-
111-
protected static void initializeConfigMonitor(List<ApolloClientMonitorEventListener> collectors,
112-
ApolloClientMetricsExporter metricsExporter) {
113-
114-
DefaultConfigMonitor configMonitor = (DefaultConfigMonitor) ApolloInjector.getInstance(
115-
ConfigMonitor.class);
116-
configMonitor.init(
117-
(DefaultApolloClientNamespaceApi) collectors.get(1),
118-
(DefaultApolloClientThreadPoolApi) collectors.get(2),
119-
(DefaultApolloClientExceptionApi) collectors.get(0),
120-
(DefaultApolloClientBootstrapArgsApi) collectors.get(3),
121-
metricsExporter
122-
);
98+
ApolloClientMetricsExporter metricsReporter = exporterFactory.getMetricsReporter(
99+
monitorContext.getCollectors());
100+
if(metricsReporter != null) {
101+
monitorContext.setApolloClientMetricsExporter(metricsReporter);
102+
}
123103
}
124104

125105
public static ApolloClientMessageProducerComposite initializeMessageProducerComposite() {
126106
List<MessageProducer> producers = ServiceBootstrap.loadAllOrdered(MessageProducer.class);
127107

128-
if (CONFIG_UTIL.getClientMonitorEnabled()) {
108+
if (m_configUtil.isClientMonitorEnabled()) {
129109
producers.add(new ApolloClientMonitorMessageProducer());
130110
}
131111

@@ -139,11 +119,11 @@ public static ApolloClientMessageProducerComposite initializeMessageProducerComp
139119

140120
return new ApolloClientMessageProducerComposite(producers);
141121
}
142-
122+
143123
// for test only
144124
protected static void reset() {
145125
hasInitialized = false;
146-
CONFIG_UTIL = ApolloInjector.getInstance(ConfigUtil.class);
126+
m_configUtil = ApolloInjector.getInstance(ConfigUtil.class);
147127

148128
}
149129
}

apollo-client/src/main/java/com/ctrip/framework/apollo/internals/DefaultInjector.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import com.ctrip.framework.apollo.monitor.api.ConfigMonitor;
2121
import com.ctrip.framework.apollo.monitor.internal.DefaultConfigMonitor;
2222
import com.ctrip.framework.apollo.monitor.internal.exporter.impl.DefaultApolloClientMetricsExporterFactory;
23-
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListenerManager;
24-
import com.ctrip.framework.apollo.monitor.internal.listener.DefaultApolloClientMonitorEventListenerManager;
23+
import com.ctrip.framework.apollo.monitor.internal.ApolloClientMonitorContext;
2524
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporterFactory;
2625
import com.ctrip.framework.apollo.spi.ApolloInjectorCustomizer;
2726
import com.ctrip.framework.apollo.spi.ConfigFactory;
@@ -113,8 +112,7 @@ protected void configure() {
113112
bind(YamlParser.class).in(Singleton.class);
114113
bind(PropertiesFactory.class).to(DefaultPropertiesFactory.class).in(Singleton.class);
115114
bind(ConfigMonitor.class).to(DefaultConfigMonitor.class).in(Singleton.class);
116-
bind(ApolloClientMonitorEventListenerManager.class).to(
117-
DefaultApolloClientMonitorEventListenerManager.class).in(Singleton.class);
115+
bind(ApolloClientMonitorContext.class).in(Singleton.class);
118116
bind(ApolloClientMetricsExporterFactory.class).to(DefaultApolloClientMetricsExporterFactory.class).in(Singleton.class);
119117
}
120118
}

apollo-client/src/main/java/com/ctrip/framework/apollo/internals/RemoteConfigRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public Properties getConfig() {
115115
if (m_configCache.get() == null) {
116116
long start = System.currentTimeMillis();
117117
this.sync();
118-
Tracer.logEvent(APOLLO_CLIENT_NAMESPACE_FIRST_LOAD_SPEND+m_namespace,
118+
Tracer.logEvent(APOLLO_CLIENT_NAMESPACE_FIRST_LOAD_SPEND+":"+m_namespace,
119119
String.valueOf(System.currentTimeMillis() - start));
120120
}
121121
return transformApolloConfigToProperties(m_configCache.get());

apollo-client/src/main/java/com/ctrip/framework/apollo/monitor/api/ApolloClientBootstrapArgsMonitorApi.java

Lines changed: 103 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,73 +16,119 @@
1616
*/
1717
package com.ctrip.framework.apollo.monitor.api;
1818

19+
import static com.ctrip.framework.apollo.core.ApolloClientSystemConsts.*;
20+
import static com.ctrip.framework.apollo.core.ConfigConsts.APOLLO_AUTO_UPDATE_INJECTED_SPRING_PROPERTIES;
21+
import static com.ctrip.framework.apollo.monitor.internal.ApolloClientMonitorConstant.*;
22+
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.*;
23+
24+
import java.util.Collections;
1925
import java.util.Map;
2026

2127
/**
2228
* @author Rawven
2329
*/
2430
public interface ApolloClientBootstrapArgsMonitorApi {
2531

26-
/**
27-
* get bootstrap args map
28-
*/
29-
Map<String, String> getBootstrapArgs();
30-
3132
/**
3233
* get startup params by key
3334
*/
34-
String getStartupParams(String key);
35-
36-
/**
37-
* config service url
38-
*/
39-
String getConfigServiceUrl();
35+
default Object getStartupArg(String key) {
36+
return getBootstrapArgs().get(key);
37+
}
4038

4139
/**
42-
* access key secret
43-
*/
44-
String getAccessKeySecret();
45-
46-
/**
47-
* auto update injected spring properties
40+
* get bootstrap args map
4841
*/
49-
Boolean getAutoUpdateInjectedSpringProperties();
50-
51-
Boolean getBootstrapEnabled();
52-
53-
String getBootstrapNamespaces();
54-
55-
Boolean getBootstrapEagerLoadEnabled();
56-
57-
Boolean getOverrideSystemProperties();
58-
59-
String getCacheDir();
60-
61-
String getCluster();
62-
63-
String getConfigService();
64-
65-
Boolean getClientMonitorEnabled();
66-
67-
Boolean getClientMonitorJmxEnabled();
68-
69-
String getClientMonitorExternalForm();
70-
71-
long getClientMonitorExternalExportPeriod();
72-
73-
int getClientMonitorExceptionSaveSize();
74-
75-
String getApolloMeta();
76-
77-
String getMetaLatestFreshTime();
78-
79-
Boolean getPropertyNamesCacheEnable();
80-
81-
Boolean getPropertyOrderEnable();
82-
83-
String getVersion();
84-
85-
String getEnv();
86-
87-
String getAppId();
88-
}
42+
default Map<String, Object> getBootstrapArgs() {
43+
return Collections.emptyMap();
44+
}
45+
46+
default String getConfigServiceUrl() {
47+
return (String) getBootstrapArgs().getOrDefault(CONFIG_SERVICE_URL, "");
48+
}
49+
50+
default String getAccessKeySecret() {
51+
return (String) getBootstrapArgs().getOrDefault(APOLLO_ACCESS_KEY_SECRET, "");
52+
}
53+
54+
default Boolean getAutoUpdateInjectedSpringProperties() {
55+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_AUTO_UPDATE_INJECTED_SPRING_PROPERTIES,
56+
false);
57+
}
58+
59+
default Boolean isBootstrapEnabled() {
60+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_BOOTSTRAP_ENABLED, false);
61+
}
62+
63+
default String getBootstrapNamespaces() {
64+
return (String) getBootstrapArgs().getOrDefault(APOLLO_BOOTSTRAP_NAMESPACES, "");
65+
}
66+
67+
default Boolean isBootstrapEagerLoadEnabled() {
68+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_BOOTSTRAP_EAGER_LOAD_ENABLED, false);
69+
}
70+
71+
default Boolean isOverrideSystemProperties() {
72+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_OVERRIDE_SYSTEM_PROPERTIES, false);
73+
}
74+
75+
default String getCacheDir() {
76+
return (String) getBootstrapArgs().getOrDefault(APOLLO_CACHE_DIR, "");
77+
}
78+
79+
default String getCluster() {
80+
return (String) getBootstrapArgs().getOrDefault(APOLLO_CLUSTER, "");
81+
}
82+
83+
default String getConfigService() {
84+
return (String) getBootstrapArgs().getOrDefault(APOLLO_CONFIG_SERVICE, "");
85+
}
86+
87+
default String getClientMonitorExternalForm() {
88+
return (String) getBootstrapArgs().getOrDefault(APOLLO_CLIENT_MONITOR_EXTERNAL_TYPE, "");
89+
}
90+
91+
default Boolean isClientMonitorEnabled() {
92+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_CLIENT_MONITOR_ENABLED, false);
93+
}
94+
95+
default Boolean isClientMonitorJmxEnabled() {
96+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_CLIENT_MONITOR_JMX_ENABLED, false);
97+
}
98+
99+
default long getClientMonitorExternalExportPeriod() {
100+
return (Long) getBootstrapArgs().getOrDefault(APOLLO_CLIENT_MONITOR_EXTERNAL_EXPORT_PERIOD, 0L);
101+
}
102+
103+
default int getClientMonitorExceptionSaveSize() {
104+
return (Integer) getBootstrapArgs().getOrDefault(APOLLO_CLIENT_MONITOR_EXCEPTION_QUEUE_SIZE, 0);
105+
}
106+
107+
default String getApolloMeta() {
108+
return (String) getBootstrapArgs().getOrDefault(APOLLO_META, "");
109+
}
110+
111+
default String getMetaLatestFreshTime() {
112+
return (String) getBootstrapArgs().getOrDefault(META_FRESH, "");
113+
}
114+
115+
default Boolean isPropertyNamesCacheEnable() {
116+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_PROPERTY_NAMES_CACHE_ENABLE, false);
117+
}
118+
119+
default Boolean isPropertyOrderEnable() {
120+
return (Boolean) getBootstrapArgs().getOrDefault(APOLLO_PROPERTY_ORDER_ENABLE, false);
121+
}
122+
123+
default String getVersion() {
124+
return (String) getBootstrapArgs().getOrDefault(VERSION, "");
125+
}
126+
127+
default String getEnv() {
128+
return (String) getBootstrapArgs().getOrDefault(ENV, "");
129+
}
130+
131+
default String getAppId() {
132+
return (String) getBootstrapArgs().getOrDefault(APP_ID, "");
133+
}
134+
}

apollo-client/src/main/java/com/ctrip/framework/apollo/monitor/api/ApolloClientExceptionMonitorApi.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
public interface ApolloClientExceptionMonitorApi {
2525

2626
/**
27-
* get ApolloConfigException details
27+
* Get exception information the number is limited and can be configured through
28+
* apollo.client.monitor.exception-queue-size
2829
*/
2930
List<Exception> getApolloConfigExceptionList();
3031

32+
Integer getExceptionCountFromStartup();
33+
3134
}

0 commit comments

Comments
 (0)