dubbo 使用说明
自动配置类
DubboAutoConfiguration
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26@ConditionalOnProperty( prefix = "dubbo", name = {"enabled"}, matchIfMissing = true ) @Configuration @AutoConfigureAfter({DubboRelaxedBindingAutoConfiguration.class}) @EnableConfigurationProperties({DubboConfigurationProperties.class}) //dubbo配置类 @EnableDubboConfig //开启dubbo配置 public class DubboAutoConfiguration { public DubboAutoConfiguration() { } @ConditionalOnProperty( prefix = "dubbo.scan.", name = {"base-packages"} ) //存在dubbo.scan.base-packages属性 @ConditionalOnBean( name = {"dubbo-service-class-base-packages"} ) //并且存在名为dubbo-service-class-base-packages的bean时, @Bean public ServiceAnnotationPostProcessor serviceAnnotationBeanProcessor(@Qualifier("dubbo-service-class-base-packages") Set<String> packagesToScan) { return new ServiceAnnotationPostProcessor(packagesToScan); } //创建ServiceAnnotationPostProcessor的bean }
EnableDubboConfig:是否开启dubbo配置bean多值绑定,默认开启
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48/** * As a convenient and multiple {@link EnableConfigurationBeanBinding} * in default behavior , is equal to single bean bindings with below convention prefixes of properties: * <ul> * <li>{@link ApplicationConfig} binding to property : "dubbo.application"</li> * <li>{@link ModuleConfig} binding to property : "dubbo.module"</li> * <li>{@link RegistryConfig} binding to property : "dubbo.registry"</li> * <li>{@link ProtocolConfig} binding to property : "dubbo.protocol"</li> * <li>{@link MonitorConfig} binding to property : "dubbo.monitor"</li> * <li>{@link ProviderConfig} binding to property : "dubbo.provider"</li> * <li>{@link ConsumerConfig} binding to property : "dubbo.consumer"</li> * </ul> * <p> * In contrast, on multiple bean bindings that requires to set {@link #multiple()} to be <code>true</code> : //开启多值绑定需设置multiple为true,默认为true * <ul> * <li>{@link ApplicationConfig} binding to property : "dubbo.applications"</li> * <li>{@link ModuleConfig} binding to property : "dubbo.modules"</li> * <li>{@link RegistryConfig} binding to property : "dubbo.registries"</li> * <li>{@link ProtocolConfig} binding to property : "dubbo.protocols"</li> * <li>{@link MonitorConfig} binding to property : "dubbo.monitors"</li> * <li>{@link ProviderConfig} binding to property : "dubbo.providers"</li> * <li>{@link ConsumerConfig} binding to property : "dubbo.consumers"</li> * </ul> * * @see EnableConfigurationBeanBinding * @see DubboConfigConfiguration * @see DubboConfigConfigurationRegistrar * @since 2.5.8 */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Import(DubboConfigConfigurationRegistrar.class) //导入DubboConfigConfigurationRegistrar类 public @interface EnableDubboConfig { /** * It indicates whether binding to multiple Spring Beans. * * @return the default value is <code>true</code> * @revised 2.5.9 */ boolean multiple() default true; }
DubboConfigConfigurationRegistrar:注册bean信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public class DubboConfigConfigurationRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { //注册bean的定义信息 // initialize dubbo beans DubboSpringInitializer.initialize(registry); //dubbo bean初始化 // Config beans creating from props have move to ConfigManager //multuiple配置bean的创建移到configManager中 // AnnotationAttributes attributes = AnnotationAttributes.fromMap( // importingClassMetadata.getAnnotationAttributes(EnableDubboConfig.class.getName())); // // boolean multiple = attributes.getBoolean("multiple"); // // // Single Config Bindings // registerBeans(registry, DubboConfigConfiguration.Single.class); // // if (multiple) { // Since 2.6.6 https://github.com/apache/dubbo/issues/3193 // registerBeans(registry, DubboConfigConfiguration.Multiple.class); // } } }
DubboSpringInitializer:dubbo初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68public class DubboSpringInitializer { public static void initialize(BeanDefinitionRegistry registry) { //初始化操作 // Spring ApplicationContext may not ready at this moment (e.g. load from xml), so use registry as key if (contextMap.putIfAbsent(registry, new DubboSpringInitContext()) != null) { return; } // prepare context and do customize DubboSpringInitContext context = contextMap.get(registry); // find beanFactory ConfigurableListableBeanFactory beanFactory = findBeanFactory(registry); // init dubbo context initContext(context, registry, beanFactory); //初始化dubbo上下文 } private static void initContext(DubboSpringInitContext context, BeanDefinitionRegistry registry, ConfigurableListableBeanFactory beanFactory) { context.setRegistry(registry); context.setBeanFactory(beanFactory); // customize context, you can change the bind module model via DubboSpringInitCustomizer SPI customize(context); // init ModuleModel ModuleModel moduleModel = context.getModuleModel(); if (moduleModel == null) { ApplicationModel applicationModel; if (findContextForApplication(ApplicationModel.defaultModel()) == null) { // first spring context use default application instance applicationModel = ApplicationModel.defaultModel(); logger.info("Use default application: " + safeGetModelDesc(applicationModel)); } else { // create an new application instance for later spring context applicationModel = FrameworkModel.defaultModel().newApplication(); logger.info("Create new application: " + safeGetModelDesc(applicationModel)); } // init ModuleModel moduleModel = applicationModel.getDefaultModule(); context.setModuleModel(moduleModel); logger.info("Use default module model of target application: " + safeGetModelDesc(moduleModel)); } else { logger.info("Use module model from customizer: " + safeGetModelDesc(moduleModel)); } logger.info("Bind " + safeGetModelDesc(moduleModel) + " to spring container: " + ObjectUtils.identityToString(registry)); // set module attributes if (context.getModuleAttributes().size() > 0) { context.getModuleModel().getAttributes().putAll(context.getModuleAttributes()); } // bind dubbo initialization context to spring context registerContextBeans(beanFactory, context); // mark context as bound context.markAsBound(); // register common beans DubboBeanUtils.registerCommonBeans(registry); //注册常用bean } ... }
DubboBeanUtils:dubbo注册工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51public interface DubboBeanUtils { static final Log log = LogFactory.getLog(DubboBeanUtils.class); /** * Register the common beans * * @param registry {@link BeanDefinitionRegistry} * @see ReferenceAnnotationBeanPostProcessor * @see DubboConfigDefaultPropertyValueBeanPostProcessor * @see DubboConfigAliasPostProcessor * @see DubboBootstrapApplicationListener */ static void registerCommonBeans(BeanDefinitionRegistry registry) { registerInfrastructureBean(registry, ServicePackagesHolder.BEAN_NAME, ServicePackagesHolder.class); registerInfrastructureBean(registry, ReferenceBeanManager.BEAN_NAME, ReferenceBeanManager.class); // Since 2.5.7 Register @Reference Annotation Bean Processor as an infrastructure Bean registerInfrastructureBean(registry, ReferenceAnnotationBeanPostProcessor.BEAN_NAME, ReferenceAnnotationBeanPostProcessor.class); //注册ReferenceAnnotationBeanPostProcessor实例,处理@DubboReference注解 // TODO Whether DubboConfigAliasPostProcessor can be removed ? // Since 2.7.4 [Feature] https://github.com/apache/dubbo/issues/5093 registerInfrastructureBean(registry, DubboConfigAliasPostProcessor.BEAN_NAME, DubboConfigAliasPostProcessor.class); // Since 2.7.4 Register DubboBootstrapApplicationListener as an infrastructure Bean // registerInfrastructureBean(registry, DubboBootstrapApplicationListener.BEAN_NAME, // DubboBootstrapApplicationListener.class); // register ApplicationListeners registerInfrastructureBean(registry, DubboDeployApplicationListener.class.getName(), DubboDeployApplicationListener.class); registerInfrastructureBean(registry, DubboConfigApplicationListener.class.getName(), DubboConfigApplicationListener.class); // Since 2.7.6 Register DubboConfigDefaultPropertyValueBeanPostProcessor as an infrastructure Bean registerInfrastructureBean(registry, DubboConfigDefaultPropertyValueBeanPostProcessor.BEAN_NAME, DubboConfigDefaultPropertyValueBeanPostProcessor.class); // Dubbo config initializer registerInfrastructureBean(registry, DubboConfigBeanInitializer.BEAN_NAME, DubboConfigBeanInitializer.class); // register infra bean if not exists later registerInfrastructureBean(registry, DubboInfraBeanRegisterPostProcessor.BEAN_NAME, DubboInfraBeanRegisterPostProcessor.class); } ... }
相关注解
@EnableDubbo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @EnableDubboConfig //使用注解@EnableDubboConfig @DubboComponentScan //使用注解@DubboComponentScan public @interface EnableDubbo { /** * Base packages to scan for annotated @Service classes. * <p> * Use {@link #scanBasePackageClasses()} for a type-safe alternative to String-based * package names. * * @return the base packages to scan * @see DubboComponentScan#basePackages() */ @AliasFor(annotation = DubboComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; //等同于注解DubboComponentScan的basePackages属性 /** * Type-safe alternative to {@link #scanBasePackages()} for specifying the packages to * scan for annotated @Service classes. The package of each class specified will be * scanned. * * @return classes from the base packages to scan * @see DubboComponentScan#basePackageClasses */ @AliasFor(annotation = DubboComponentScan.class, attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; //等同于注解DubboComponentScan的basePackageClasses属性 /** * It indicates whether {@link AbstractConfig} binding to multiple Spring Beans. * * @return the default value is <code>true</code> * @see EnableDubboConfig#multiple() */ @AliasFor(annotation = EnableDubboConfig.class, attribute = "multiple") boolean multipleConfig() default true; //等同于注解EnableDubboConfig的multiple的属性 }
DubboComponentScan:扫描指定包或者类,如果类上有注解@DubboService,创建bean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(DubboComponentScanRegistrar.class) //引入DubboComponentScanRegistrar类 public @interface DubboComponentScan { /** * Alias for the {@link #basePackages()} attribute. Allows for more concise annotation * declarations e.g.: {@code @DubboComponentScan("org.my.pkg")} instead of * {@code @DubboComponentScan(basePackages="org.my.pkg")}. * * @return the base packages to scan */ String[] value() default {}; /** * Base packages to scan for annotated @Service classes. {@link #value()} is an * alias for (and mutually exclusive with) this attribute. * <p> * Use {@link #basePackageClasses()} for a type-safe alternative to String-based * package names. * * @return the base packages to scan */ String[] basePackages() default {}; /** * Type-safe alternative to {@link #basePackages()} for specifying the packages to * scan for annotated @Service classes. The package of each class specified will be * scanned. * * @return classes from the base packages to scan */ Class<?>[] basePackageClasses() default {}; }
DubboComponentScanRegistrar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74public class DubboComponentScanRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { //注册类定义信息 // initialize dubbo beans DubboSpringInitializer.initialize(registry); Set<String> packagesToScan = getPackagesToScan(importingClassMetadata); registerServiceAnnotationPostProcessor(packagesToScan, registry); //注册ServiceAnnotationPostProcessor处理器,处理@DubboService注解 } /** * Registers {@link ServiceAnnotationPostProcessor} * * @param packagesToScan packages to scan without resolving placeholders * @param registry {@link BeanDefinitionRegistry} * @since 2.5.8 */ private void registerServiceAnnotationPostProcessor(Set<String> packagesToScan, BeanDefinitionRegistry registry) { //注册ServiceAnnotationPostProcessor处理器 BeanDefinitionBuilder builder = rootBeanDefinition(ServiceAnnotationPostProcessor.class); builder.addConstructorArgValue(packagesToScan); builder.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); AbstractBeanDefinition beanDefinition = builder.getBeanDefinition(); BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, registry); } private Set<String> getPackagesToScan(AnnotationMetadata metadata) { // get from @DubboComponentScan Set<String> packagesToScan = getPackagesToScan0(metadata, DubboComponentScan.class, "basePackages", "basePackageClasses"); // get from @EnableDubbo, compatible with spring 3.x if (packagesToScan.isEmpty()) { packagesToScan = getPackagesToScan0(metadata, EnableDubbo.class, "scanBasePackages", "scanBasePackageClasses"); } if (packagesToScan.isEmpty()) { return Collections.singleton(ClassUtils.getPackageName(metadata.getClassName())); } return packagesToScan; } private Set<String> getPackagesToScan0(AnnotationMetadata metadata, Class annotationClass, String basePackagesName, String basePackageClassesName) { AnnotationAttributes attributes = AnnotationAttributes.fromMap( metadata.getAnnotationAttributes(annotationClass.getName())); if (attributes == null) { return Collections.emptySet(); } Set<String> packagesToScan = new LinkedHashSet<>(); // basePackages String[] basePackages = attributes.getStringArray(basePackagesName); packagesToScan.addAll(Arrays.asList(basePackages)); // basePackageClasses Class<?>[] basePackageClasses = attributes.getClassArray(basePackageClassesName); for (Class<?> basePackageClass : basePackageClasses) { packagesToScan.add(ClassUtils.getPackageName(basePackageClass)); } // value if (attributes.containsKey("value")) { String[] value = attributes.getStringArray("value"); packagesToScan.addAll(Arrays.asList(value)); } return packagesToScan; } }
@DubboService:服务提供端服务暴露,一般标注在接口实现类上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) @Inherited public @interface DubboService { /** * Interface class, default value is void.class */ Class<?> interfaceClass() default void.class; /** * Interface class name, default value is empty string */ String interfaceName() default ""; String group() default ""; //服务分组 String version() default ""; //服务版本 /** * Service path, default value is empty string */ String path() default ""; boolean export() default true; //是否暴露服务,默认true boolean dynamic() default true; //服务是否动态注册,默认true boolean register() default true; //是否向注册中心注册服务,默认true boolean deprecated() default false; //服务是否禁用,默认false int delay() default -1; //服务延时注册时间,默认为0 int weight() default -1; //服务权重,默认为0 int executes() default -1; //服务最大并发执行数,默认为0(不限制) int timeout() default -1; //服务调用超时时间,默认为0 /** * Service token, default value is false */ String token() default ""; /** * Access log for the service, default value is "" */ String accesslog() default ""; /** * Service doc, default value is "" */ String document() default ""; /** * @see DubboService#stub() * @deprecated */ String local() default ""; /** * Service stub name, use interface name + Local if not set */ String stub() default ""; /** * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking * you can use {@link org.apache.dubbo.common.constants.ClusterRules#FAIL_FAST} …… */ String cluster() default ClusterRules.EMPTY; //容错策略 /** * Service invocation retry times * * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_RETRIES */ int retries() default -1; //重试次数 /** * Service mock name, use interface name + Mock if not set */ String mock() default ""; //服务降级接口 /** * Load balance strategy, legal values include: random, roundrobin, leastactive * * you can use {@link org.apache.dubbo.common.constants.LoadbalanceRules#RANDOM} …… */ String loadbalance() default ClusterRules.EMPTY; //负载均衡策略 /** * How the proxy is generated, legal values include: jdk, javassist */ String proxy() default ""; /** * Maximum connections service provider can accept, default value is 0 - connection is shared */ int connections() default -1; /** * The callback instance limit peer connection * <p> * see org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CALLBACK_INSTANCES */ int callbacks() default -1; /** * Callback method name when connected, default value is empty string */ String onconnect() default ""; /** * Callback method name when disconnected, default value is empty string */ String ondisconnect() default ""; /** * Service owner, default value is empty string */ String owner() default ""; /** * Service layer, default value is empty string */ String layer() default ""; /** * Whether to enable async invocation, default value is false */ boolean async() default false; //是否开启异步调用,默认false /** * Maximum active requests allowed, default value is 0 */ int actives() default -1; //最大活跃请求数 /** * Whether the async request has already been sent, the default value is false */ boolean sent() default false; /** * Whether to use JSR303 validation, legal values are: true, false */ String validation() default ""; /** * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache */ String cache() default ""; /** * Filters for service invocation * * @see Filter */ String[] filter() default {}; //过滤器 /** * Listeners for service exporting and unexporting * * @see ExporterListener */ String[] listener() default {}; /** * Customized parameter key-value pair, for example: {key1, value1, key2, value2} */ String[] parameters() default {}; //自定义参数,如:{key1, value1, key2, value2} /** * Application spring bean name * @deprecated This attribute was deprecated, use bind application/module of spring ApplicationContext */ @Deprecated String application() default ""; //已禁用 /** * Module spring bean name */ String module() default ""; /** * Provider spring bean name */ String provider() default ""; /** * Protocol spring bean names */ String[] protocol() default {}; /** * Monitor spring bean name */ String monitor() default ""; /** * Registry spring bean name */ String[] registry() default {}; /** * Service tag name */ String tag() default ""; /** * methods support * * @return */ Method[] methods() default {}; /** * the scope for referring/exporting a service, if it's local, it means searching in current JVM only. * @see org.apache.dubbo.rpc.Constants#SCOPE_LOCAL * @see org.apache.dubbo.rpc.Constants#SCOPE_REMOTE */ String scope() default ""; //服务暴露、调用类型,可选值:local、remote /** * Weather the service is export asynchronously */ boolean exportAsync() default false; //是否异步暴露,默认false }
@DubboReference:消费端服务调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) public @interface DubboReference { /** * Interface class, default value is void.class */ Class<?> interfaceClass() default void.class; /** * Interface class name, default value is empty string */ String interfaceName() default ""; String group() default ""; //服务分组 String version() default ""; //服务版本 /** * Service target URL for direct invocation, if this is specified, then registry center takes no effect. */ String url() default ""; //直连服务提供端(如果配置了,则不使用注册中心) /** * Client transport type, default value is "netty" */ String client() default ""; //客户端传输方式,默认为netty /** * Whether to enable generic invocation, default value is false * @deprecated Do not need specify generic value, judge by injection type and interface class */ @Deprecated boolean generic() default false; //已禁用 /** * When enable, prefer to call local service in the same JVM if it's present, default value is true * @deprecated using scope="local" or scope="remote" instead */ @Deprecated boolean injvm() default true; //已禁用 /** * Check if service provider is available during boot up, default value is true */ boolean check() default true; /** * Whether eager initialize the reference bean when all properties are set, default value is true ( null as true) * @see ReferenceConfigBase#shouldInit() */ boolean init() default true; /** * Whether to make connection when the client is created, the default value is false */ boolean lazy() default false; /** * Export an stub service for event dispatch, default value is false. * <p> * see org.apache.dubbo.rpc.Constants#STUB_EVENT_METHODS_KEY */ boolean stubevent() default false; /** * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by default, and the interval * for retry connecting is 2000 ms * <p> * see org.apache.dubbo.remoting.Constants#DEFAULT_RECONNECT_PERIOD */ String reconnect() default ""; /** * Whether to stick to the same node in the cluster, the default value is false * <p> * see Constants#DEFAULT_CLUSTER_STICKY */ boolean sticky() default false; /** * How the proxy is generated, legal values include: jdk, javassist */ String proxy() default ""; /** * Service stub name, use interface name + Local if not set */ String stub() default ""; /** * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking * you can use {@link org.apache.dubbo.common.constants.ClusterRules#FAIL_FAST} …… */ String cluster() default ClusterRules.EMPTY; /** * Maximum connections service provider can accept, default value is 0 - connection is shared */ int connections() default -1; /** * The callback instance limit peer connection * <p> * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES */ int callbacks() default -1; /** * Callback method name when connected, default value is empty string */ String onconnect() default ""; /** * Callback method name when disconnected, default value is empty string */ String ondisconnect() default ""; /** * Service owner, default value is empty string */ String owner() default ""; /** * Service layer, default value is empty string */ String layer() default ""; /** * Service invocation retry times * <p> * see Constants#DEFAULT_RETRIES */ int retries() default -1; /** * Load balance strategy, legal values include: random, roundrobin, leastactive * you can use {@link org.apache.dubbo.common.constants.LoadbalanceRules#RANDOM} …… */ String loadbalance() default LoadbalanceRules.EMPTY; /** * Whether to enable async invocation, default value is false */ boolean async() default false; /** * Maximum active requests allowed, default value is 0 */ int actives() default -1; /** * Whether the async request has already been sent, the default value is false */ boolean sent() default false; /** * Service mock name, use interface name + Mock if not set */ String mock() default ""; /** * Whether to use JSR303 validation, legal values are: true, false */ String validation() default ""; /** * Timeout value for service invocation, default value is 0 */ int timeout() default -1; /** * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache */ String cache() default ""; /** * Filters for service invocation * <p> * see Filter */ String[] filter() default {}; /** * Listeners for service exporting and unexporting * <p> * see ExporterListener */ String[] listener() default {}; /** * Customized parameter key-value pair, for example: {key1, value1, key2, value2} or {"key1=value1", "key2=value2"} */ String[] parameters() default {}; /** * Application name * @deprecated This attribute was deprecated, use bind application/module of spring ApplicationContext */ @Deprecated String application() default ""; /** * Module associated name */ String module() default ""; /** * Consumer associated name */ String consumer() default ""; /** * Monitor associated name */ String monitor() default ""; /** * Registry associated name */ String[] registry() default {}; /** * The communication protocol of Dubbo Service * * @return the default value is "" * @since 2.6.6 */ String protocol() default ""; /** * Service tag name */ String tag() default ""; /** * Service merger */ String merger() default ""; /** * methods support */ Method[] methods() default {}; /** * The id * NOTE: The id attribute is ignored when using @DubboReference on @Bean method * @return default value is empty * @since 2.7.3 */ String id() default ""; /** * @return The service names that the Dubbo interface subscribed * @see RegistryConstants#SUBSCRIBED_SERVICE_NAMES_KEY * @since 2.7.8 * @deprecated using {@link DubboReference#providedBy()} */ @Deprecated String[] services() default {}; /** * declares which app or service this interface belongs to * @see RegistryConstants#PROVIDED_BY */ String[] providedBy() default {}; /** * the scope for referring/exporting a service, if it's local, it means searching in current JVM only. * @see org.apache.dubbo.rpc.Constants#SCOPE_LOCAL * @see org.apache.dubbo.rpc.Constants#SCOPE_REMOTE */ String scope() default ""; /** * Weather the reference is refer asynchronously */ boolean referAsync() default false; }
配置类
DubboConfiguratinProperties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73@ConfigurationProperties("dubbo") public class DubboConfigurationProperties { @NestedConfigurationProperty private DubboConfigurationProperties.Config config = new DubboConfigurationProperties.Config(); @NestedConfigurationProperty private DubboConfigurationProperties.Scan scan = new DubboConfigurationProperties.Scan(); @NestedConfigurationProperty private ApplicationConfig application = new ApplicationConfig(); @NestedConfigurationProperty private ModuleConfig module = new ModuleConfig(); @NestedConfigurationProperty private RegistryConfig registry = new RegistryConfig(); @NestedConfigurationProperty private ProtocolConfig protocol = new ProtocolConfig(); @NestedConfigurationProperty private MonitorConfig monitor = new MonitorConfig(); @NestedConfigurationProperty private ProviderConfig provider = new ProviderConfig(); @NestedConfigurationProperty private ConsumerConfig consumer = new ConsumerConfig(); @NestedConfigurationProperty private ConfigCenterBean configCenter = new ConfigCenterBean(); @NestedConfigurationProperty private MetadataReportConfig metadataReport = new MetadataReportConfig(); @NestedConfigurationProperty private MetricsConfig metrics = new MetricsConfig(); private Map<String, ModuleConfig> modules = new LinkedHashMap(); private Map<String, RegistryConfig> registries = new LinkedHashMap(); private Map<String, ProtocolConfig> protocols = new LinkedHashMap(); private Map<String, MonitorConfig> monitors = new LinkedHashMap(); private Map<String, ProviderConfig> providers = new LinkedHashMap(); private Map<String, ConsumerConfig> consumers = new LinkedHashMap(); private Map<String, ConfigCenterBean> configCenters = new LinkedHashMap(); private Map<String, MetadataReportConfig> metadataReports = new LinkedHashMap(); private Map<String, MetricsConfig> metricses = new LinkedHashMap(); public DubboConfigurationProperties() { } ****** 内部类:Scan static class Scan { private Set<String> basePackages = new LinkedHashSet(); Scan() { } public Set<String> getBasePackages() { return this.basePackages; } public void setBasePackages(Set<String> basePackages) { this.basePackages = basePackages; } } ****** 内部类:Config static class Config { private ConfigMode mode; private boolean multiple; private boolean override; Config() { this.mode = ConfigMode.STRICT; this.multiple = true; this.override = true; }
AbstractConfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48public abstract class AbstractConfig implements Serializable { protected static final Logger logger = LoggerFactory.getLogger(AbstractConfig.class); private static final long serialVersionUID = 4267533505537413570L; /** * tag name cache, speed up get tag name frequently */ private static final Map<Class, String> tagNameCache = new ConcurrentHashMap<>(); /** * attributed getter method cache for equals(), hashCode() and toString() */ private static final Map<Class, List<Method>> attributedMethodCache = new ConcurrentHashMap<>(); /** * The suffix container */ private static final String[] SUFFIXES = new String[]{"Config", "Bean", "ConfigBase"}; /** * The config id */ private String id; protected final AtomicBoolean refreshed = new AtomicBoolean(false); /** * Is default config or not */ protected Boolean isDefault; /** * The scope model of this config instance. * <p> * <b>NOTE:</b> the model maybe changed during config processing, * the extension spi instance needs to be reinitialized after changing the model! */ protected ScopeModel scopeModel; public AbstractConfig() { this(ApplicationModel.defaultModel()); } public AbstractConfig(ScopeModel scopeModel) { this.setScopeModel(scopeModel); }
ScopeModel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43public abstract class ScopeModel implements ExtensionAccessor { protected static final Logger LOGGER = LoggerFactory.getLogger(ScopeModel.class); /** * The internal id is used to represent the hierarchy of the model tree, such as: * <ol> * <li>1</li> * FrameworkModel (index=1) * <li>1.2</li> * FrameworkModel (index=1) -> ApplicationModel (index=2) * <li>1.2.0</li> * FrameworkModel (index=1) -> ApplicationModel (index=2) -> ModuleModel (index=0, internal module) * <li>1.2.1</li> * FrameworkModel (index=1) -> ApplicationModel (index=2) -> ModuleModel (index=1, first user module) * </ol> */ private String internalId; /** * Public Model Name, can be set from user */ private String modelName; private String desc; private Set<ClassLoader> classLoaders; private final ScopeModel parent; private final ExtensionScope scope; private ExtensionDirector extensionDirector; private ScopeBeanFactory beanFactory; private List<ScopeModelDestroyListener> destroyListeners; private Map<String, Object> attributes; private final AtomicBoolean destroyed = new AtomicBoolean(false); public ScopeModel(ScopeModel parent, ExtensionScope scope) { this.parent = parent; this.scope = scope; }
ApplicationConfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109public class ApplicationConfig extends AbstractConfig { private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfig.class); private static final long serialVersionUID = 5508512956753757169L; private String name; //应用名称(必填) private String version; //应用版本 private String owner; //应用负责人,用于服务治理,可填写负责人公司邮箱前缀 private String organization; //组织名称(BU或部门),用于注册中心区分服务来源 private String architecture; //用于服务分层对应的架构,如:ntl、china private String environment; //应用环境,如:develop、test、product,作为只用于开发测试功能的限制条件 private String compiler; //生成自适应代码的编译器,可选值:jdk、javassist(默认) private String logger; //日志输出方式,可选值:slf4j(默认),jcl,log4j,log4j2,jdk /** * Registry centers */ private List<RegistryConfig> registries; private String registryIds; /** * Monitor center */ private MonitorConfig monitor; /** * Directory for saving thread dump */ private String dumpDirectory; /** * Whether to enable qos or not */ private Boolean qosEnable; /** * The qos host to listen */ private String qosHost; /** * The qos port to listen */ private Integer qosPort; /** * Should we accept foreign ip or not? */ private Boolean qosAcceptForeignIp; /** * Customized parameters */ private Map<String, String> parameters; /** * Config the shutdown.wait */ private String shutwait; private String hostname; /** * Metadata type, local or remote, if choose remote, you need to further specify metadata center. */ private String metadataType; private Boolean registerConsumer; private String repository; private Boolean enableFileCache; /** * The preferred protocol(name) of this application * convenient for places where it's hard to determine which is the preferred protocol */ private String protocol; /** * The protocol used for peer-to-peer metadata transmission */ private String metadataServiceProtocol; /** * Metadata Service, used in Service Discovery */ private Integer metadataServicePort; /** * used to set extensions of probe in qos */ private String livenessProbe; private String readinessProbe; private String startupProbe; private String registerMode; //provider注册类型,可选值:all(默认)、interface(接口粒度)、instance(应用粒度) private Boolean enableEmptyProtection; public ApplicationConfig() { public ApplicationConfig(ApplicationModel applicationModel) { public ApplicationConfig(String name) { public ApplicationConfig(ApplicationModel applicationModel, String name) {
ModuleConfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68public class ModuleConfig extends AbstractConfig { private static final long serialVersionUID = 5508512956753757169L; /** * Module name */ private String name; /** * Module version */ private String version; /** * Module owner */ private String owner; /** * Module's organization */ private String organization; /** * Registry centers */ private List<RegistryConfig> registries; //注册中心配置 /** * Monitor center */ private MonitorConfig monitor; //监控中心配置 /** * Whether start module in background. * If start in backgound, do not await finish on Spring ContextRefreshedEvent. * * @see org.apache.dubbo.config.spring.context.DubboDeployApplicationListener */ private Boolean background; /** * Weather the reference is refer asynchronously */ private Boolean referAsync; //是否异步引用 /** * Thread num for asynchronous refer pool size */ private Integer referThreadNum; //消费端引用线程池大小 /** * Weather the service is export asynchronously */ private Boolean exportAsync; //provider是否异步暴露 /** * Thread num for asynchronous export pool size */ private Integer exportThreadNum; //provider暴露线程池大小 public ModuleConfig() { public ModuleConfig(ModuleModel moduleModel) { public ModuleConfig(String name) { public ModuleConfig(ModuleModel moduleModel, String name) {
RegistryConfig:注册中心配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78public class RegistryConfig extends AbstractConfig { public static final String NO_AVAILABLE = "N/A"; private static final long serialVersionUID = 5508512956753757169L; private String address; //注册中心地址,多个值用逗号间隔,如:ip:port,ip:port(可不带port) private Integer port; //注册中心端口,默认9090 private String username; //用户名 private String password; //密码 private String protocol; //注册中心地址协议,可选值:dubbo(默认)、zookeeper、redis等 private String transporter; //网络传输方式,可选值:mina、netty(默认) private String server; private String client; /** * Affects how traffic distributes among registries, useful when subscribing multiple registries, available options: * 1. zone-aware, a certain type of traffic always goes to one Registry according to where the traffic is originated. */ private String cluster; private String group; //服务注册分组,默认dubbo private String version; //服务版本 private String zone; //服务分区 private Integer timeout; //注册中心请求超时时间,单位为毫秒 private Integer session; //注册中心会话超时时间,单位为毫秒 private Integer wait; //停止时等待通知完成时间,单位为毫秒 private String file; //使用文件缓存注册中心地址列表及服务提供者列表 private Boolean check; //应用启动时检查注册中心是否可用,默认true private Boolean dynamic; //服务是否可以动态注册,默认true private Boolean register; //是否向注册中心注册服务,如果设为false,将只订阅,不注册,默认true private Boolean subscribe; //是否向此注册中心订阅服务,如果设为false,将只注册,不订阅,默认true private Map<String, String> parameters; //自定义参数 /** * Simple the registry. both useful for provider and consumer * * @since 2.7.0 */ private Boolean simplified; /** * After simplify the registry, should add some parameter individually. just for provider. * <p> * such as: extra-keys = A,b,c,d * * @since 2.7.0 */ private String extraKeys; private Boolean useAsConfigCenter; //注册中心是否用作配置中心 private Boolean useAsMetadataCenter; //注册中心是否用作元数据中心 private String accepts; //可接受的rpc协议列表,如:dubbo,rest private Boolean preferred; //是否优先使用该注册中心 /** * Affects traffic distribution among registries, useful when subscribe to multiple registries * Take effect only when no preferred registry is specified. */ private Integer weight; //注册中心权重,未设置prefered时有效 private String registerMode; //注册模式,可选值:all(默认)、interface(接口粒度)、instance(应用粒度) private Boolean enableEmptyProtection; public RegistryConfig() { public RegistryConfig(ApplicationModel applicationModel) { public RegistryConfig(String address) { public RegistryConfig(ApplicationModel applicationModel, String address) { public RegistryConfig(String address, String protocol) { public RegistryConfig(ApplicationModel applicationModel, String address, String protocol) {
MonitorConfig:监控中心配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28public class MonitorConfig extends AbstractConfig { private static final long serialVersionUID = -1184681514659198203L; /** * The protocol of the monitor, if the value is registry, it will search the monitor address from the registry center, * otherwise, it will directly connect to the monitor center */ private String protocol; private String address; private String username; private String password; private String group; private String version; private String interval; /** * customized parameters */ private Map<String, String> parameters; //自定义的参数 public MonitorConfig() { public MonitorConfig(ApplicationModel applicationModel) { public MonitorConfig(String address) { public MonitorConfig(ApplicationModel applicationModel, String address) {
ProviderConfig:provider配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143public class ProviderConfig extends AbstractServiceConfig { private static final long serialVersionUID = 6913423882496634749L; // ======== protocol default values, it'll take effect when protocol's attributes are not set ======== /** * Service ip addresses (used when there are multiple network cards available) */ private String host; /** * Service port */ private Integer port; /** * Context path */ private String contextpath; /** * Thread pool */ private String threadpool; /** * Thread pool name */ private String threadname; /** * Thread pool size (fixed size) */ private Integer threads; /** * IO thread pool size (fixed size) */ private Integer iothreads; /** * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS */ private Integer alive; /** * Thread pool queue length */ private Integer queues; /** * Max acceptable connections */ private Integer accepts; /** * Protocol codec */ private String codec; /** * The serialization charset */ private String charset; /** * Payload max length */ private Integer payload; /** * The network io buffer size */ private Integer buffer; /** * Transporter */ private String transporter; /** * How information gets exchanged */ private String exchanger; /** * Thread dispatching mode */ private String dispatcher; /** * Networker */ private String networker; /** * The server-side implementation model of the protocol */ private String server; /** * The client-side implementation model of the protocol */ private String client; /** * Supported telnet commands, separated with comma. */ private String telnet; /** * Command line prompt */ private String prompt; /** * Status check */ private String status; /** * Wait time when stop */ private Integer wait; /** * Thread num for asynchronous export pool size */ private Integer exportThreadNum; /** * Whether export should run in background or not. * * @deprecated replace with {@link ModuleConfig#setBackground(Boolean)} * @see ModuleConfig#setBackground(Boolean) */ private Boolean exportBackground; public ProviderConfig() { public ProviderConfig(ModuleModel moduleModel) {
ConsumerConfig:consumer配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58public class ConsumerConfig extends AbstractReferenceConfig { private static final long serialVersionUID = 2827274711143680600L; /** * Networking framework client uses: netty, mina, etc. */ private String client; /** * Consumer thread pool type: cached, fixed, limit, eager */ private String threadpool; /** * Consumer threadpool core thread size */ private Integer corethreads; /** * Consumer threadpool thread size */ private Integer threads; /** * Consumer threadpool queue size */ private Integer queues; /** * By default, a TCP long-connection communication is shared between the consumer process and the provider process. * This property can be set to share multiple TCP long-connection communications. Note that only the dubbo protocol takes effect. */ private Integer shareconnections; /** * Url Merge Processor * Used to customize the URL merge of consumer and provider */ private String urlMergeProcessor; /** * Thread num for asynchronous refer pool size */ private Integer referThreadNum; /** * Whether refer should run in background or not. * * @deprecated replace with {@link ModuleConfig#setBackground(Boolean)} * @see ModuleConfig#setBackground(Boolean) */ private Boolean referBackground; public ConsumerConfig() { public ConsumerConfig(ModuleModel moduleModel) {
ConfigCenterBean:配置中心实例
1
2
3
4
5
6
7
8
9public class ConfigCenterBean extends ConfigCenterConfig implements ApplicationContextAware, DisposableBean, EnvironmentAware { private transient ApplicationContext applicationContext; private Boolean includeSpringEnv = false; public ConfigCenterBean() { }
ConfigCneterConfig:配置中心配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73public class ConfigCenterConfig extends AbstractConfig { private final AtomicBoolean initialized = new AtomicBoolean(false); private String protocol; private String address; private Integer port; /** * The config center cluster, it's real meaning may very on different Config Center products. */ private String cluster; /** * The namespace of the config center, generally it's used for multi-tenant, * but it's real meaning depends on the actual Config Center you use. * The default value is CommonConstants.DUBBO */ private String namespace; /** * The group of the config center, generally it's used to identify an isolated space for a batch of config items, * but it's real meaning depends on the actual Config Center you use. * The default value is CommonConstants.DUBBO */ private String group; private String username; private String password; /** * The default value is 3000L; */ private Long timeout; /** * If the Config Center is given the highest priority, it will override all the other configurations * The default value is true * @deprecated no longer used */ private Boolean highestPriority; /** * Decide the behaviour when initial connection try fails, 'true' means interrupt the whole process once fail. * The default value is true */ private Boolean check; /** * Used to specify the key that your properties file mapping to, most of the time you do not need to change this parameter. * Notice that for Apollo, this parameter is meaningless, set the 'namespace' is enough. * The default value is CommonConstants.DEFAULT_DUBBO_PROPERTIES */ private String configFile; /** * the properties file under 'configFile' is global shared while .properties under this one is limited only to this application */ private String appConfigFile; /** * If the Config Center product you use have some special parameters that is not covered by this class, you can add it to here. * For example, with XML: * <dubbo:config-center> * <dubbo:parameter key="{your key}" value="{your value}" /> * </dubbo:config-center> */ private Map<String, String> parameters; //自定义参数 private Map<String, String> externalConfiguration; private Map<String, String> appExternalConfiguration; public ConfigCenterConfig() { public ConfigCenterConfig(ApplicationModel applicationModel) {
MetadataReportConfig:元数据中心配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59public class MetadataReportConfig extends AbstractConfig { private static final long serialVersionUID = 55233L; private String protocol; private String address; //元数据中心地址 private Integer port; //元数据中心端口 private String username; //元数据中心用户名 private String password; //元数据中心密码 private Integer timeout; //请求超时时间,单位毫秒 /** * The group the metadata in . It is the same as registry */ private String group; private Map<String, String> parameters; //自定义参数 private Integer retryTimes; //重试次数,默认100次 private Integer retryPeriod; //重试周期,默认3000毫秒 /** * By default the metadata store will store full metadata repeatedly every day . */ private Boolean cycleReport; //是否定时刷新元数据,默认true /** * Sync report, default async */ private Boolean syncReport; //是否同步存储,默认异步 /** * cluster */ private Boolean cluster; /** * registry id */ private String registry; /** * File for saving metadata center dynamic list */ private String file; /** * Decide the behaviour when initial connection try fails, * 'true' means interrupt the whole process once fail. * The default value is true */ private Boolean check; public MetadataReportConfig() { public MetadataReportConfig(ApplicationModel applicationModel) { public MetadataReportConfig(String address) { public MetadataReportConfig(ApplicationModel applicationModel, String address) {
MetricsConfig:指标运维配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29public class MetricsConfig extends AbstractConfig { private static final long serialVersionUID = -9089919311611546383L; private String protocol; /** * @deprecated After metrics config is refactored. * This parameter should no longer use and will be deleted in the future. */ @Deprecated private String port; /** * The prometheus metrics config */ @Nested private PrometheusConfig prometheus; //prometheus配置 /** * The metrics aggregation config */ @Nested private AggregationConfig aggregation; //聚合配置 public MetricsConfig() { public MetricsConfig(ApplicationModel applicationModel) {
PrometheusConfig:prometheus配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81public class PrometheusConfig { /** * Prometheus exporter configuration */ @Nested private Exporter exporter; /** * Prometheus Pushgateway configuration */ @Nested private Pushgateway pushgateway; ******* 内部类:Exporter public static class Exporter { /** * Enable prometheus exporter */ private Boolean enabled; /** * Enable http service discovery for prometheus */ private Boolean enableHttpServiceDiscovery; /** * Http service discovery url */ private String httpServiceDiscoveryUrl; /** * When using pull method, which port to expose */ private Integer metricsPort; /** * When using pull mode, which path to expose metrics */ private String metricsPath; ******* 内部类:Pushgateway public static class Pushgateway { /** * Enable publishing via a Prometheus Pushgateway */ private Boolean enabled; /** * Base URL for the Pushgateway */ private String baseUrl; /** * Login user of the Prometheus Pushgateway */ private String username; /** * Login password of the Prometheus Pushgateway */ private String password; /** * Frequency with which to push metrics */ private Integer pushInterval; /** * Job identifier for this application instance */ private String job;
AggregationConfig:聚合配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class AggregationConfig { /** * Enable local aggregation or not */ private Boolean enabled; /** * Bucket num for time window quantile */ private Integer bucketNum; /** * Time window seconds for time window quantile */ private Integer timeWindowSeconds;
最后
以上就是落后小馒头最近收集整理的关于dubbo 使用说明的全部内容,更多相关dubbo内容请搜索靠谱客的其他文章。
发表评论 取消回复