2020
2121import com .ctrip .framework .apollo .build .ApolloInjector ;
2222import 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 ;
2523import com .ctrip .framework .apollo .monitor .internal .exporter .AbstractApolloClientMetricsExporter ;
24+ import com .ctrip .framework .apollo .monitor .internal .exporter .ApolloClientMetricsExporter ;
2625import 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 ;
2927import com .ctrip .framework .apollo .monitor .internal .listener .impl .DefaultApolloClientBootstrapArgsApi ;
3028import com .ctrip .framework .apollo .monitor .internal .listener .impl .DefaultApolloClientExceptionApi ;
3129import com .ctrip .framework .apollo .monitor .internal .listener .impl .DefaultApolloClientNamespaceApi ;
3230import 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 ;
3531import com .ctrip .framework .apollo .monitor .internal .exporter .ApolloClientMetricsExporterFactory ;
3632import com .ctrip .framework .apollo .monitor .internal .tracer .ApolloClientMonitorMessageProducer ;
3733import com .ctrip .framework .apollo .monitor .internal .tracer .ApolloClientMessageProducerComposite ;
4137import com .ctrip .framework .apollo .tracer .spi .MessageProducer ;
4238import com .ctrip .framework .apollo .util .ConfigUtil ;
4339import com .ctrip .framework .foundation .internals .ServiceBootstrap ;
44- import com .google .common .collect .Lists ;
4540import java .util .List ;
46- import org .slf4j .Logger ;
47- import org .slf4j .LoggerFactory ;
4841
4942/**
5043 * ConfigMonitorInitializer initializes the Apollo Config Monitor.
5144 */
5245public 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}
0 commit comments