...
The Micrometer metrics library become a de factor instrumentation choice for JVM application. It has been supported by Apache CXF starting from 3.4.1 / 3.3.8 and above for the server-side and 3.4.2 / 3.3.9 and above for the client-side.
Metrics Provider
The Micrometer integration is provided by MicrometerMetricsProvider.
...
Property | Description | Default |
---|---|---|
autoTimeRequests | Whether requests handled by CXF should be automatically timed. If the number of time series emitted grows | true |
requestsMetricNameserverRequestsMetricName | Name of the metric for received requests (server-side) | cxf.server.requests |
clientRequestsMetricName | Name of the metric for sent requests (client-side) | cxf.client.requests |
Integration with JAX-WS
Server
The typical way to plug Micrometer integration on the server-side is by using WebServiceFeature mechanism, for which there is a dedicated MetricsFeature implementation. The snipped below illustrated the basic initialization sequence and set of the dependencies involved.
Code Block |
---|
final MeterRegistry registry = ...; /* Micrometer MeterRegistry instance */ final JaxwsTags jaxwsTags = new JaxwsTags(); final TagsCustomizer operationsCustomizer = new JaxwsOperationTagsCustomizer(jaxwsTags); final TagsCustomizer faultsCustomizer = new JaxwsFaultCodeTagsCustomizer(jaxwsTags, new JaxwsFaultCodeProvider()); final TagsProvider tagsProvider = new StandardTagsProvider(new DefaultExceptionClassProvider(), new StandardTags()); final MicrometerMetricsProperties properties = new MicrometerMetricsProperties(); final MetricsProvider metricsProvider = new MicrometerMetricsProvider(registry, tagsProvider, Arrays.asList(operationsCustomizer, faultsCustomizer), new DefaultTimedAnnotationProvider(), properties); final JAXWSServerFactoryBean factory = new JAXWSServerFactoryBean(); factory.setWsFeatures(Arrays.asList(new MetricsFeature(metricsProvider))); ... |
Alternatively, the MetricsFeature could be supplied directly to JAX-WS endpoint, for example:
Code Block |
---|
EndpointImpl endpoint = new EndpointImpl(bus, new HelloPortImpl(), null, null, new WebServiceFeature[]{ new MetricsFeature(metricsProvider) }); |
Client (since 3.3.9 / 3.4.2)
The client integration is no different from the server and uses the same MetricsFeature feature.
Code Block |
---|
final MeterRegistry registry = ...; /* Micrometer MeterRegistry instance */
final JaxwsTags jaxwsTags = new JaxwsTags();
final TagsCustomizer operationsCustomizer = new JaxwsOperationTagsCustomizer(jaxwsTags);
final TagsCustomizer faultsCustomizer = new JaxwsFaultCodeTagsCustomizer(jaxwsTags, new JaxwsFaultCodeProvider());
final TagsProvider tagsProvider = new StandardTagsProvider(new DefaultExceptionClassProvider(), new StandardTags());
final MicrometerMetricsProperties properties = new MicrometerMetricsProperties();
final MetricsProvider metricsProvider = new MicrometerMetricsProvider(registry, tagsProvider,
Arrays.asList(operationsCustomizer, faultsCustomizer), new DefaultTimedAnnotationProvider(), properties);
final JaxWsClientFactoryBean factory = new JaxWsClientFactoryBean();
factory.setFeatures(Arrays.asList(new MetricsFeature(new MicrometerMetricsProvider(metricsProvider))));
... |
Integration with JAX-RS
Server
The typical way to plug Micrometer integration on the server-side is by using AbstractFeature which is implemented by MetricsFeature. The snipped below illustrated the basic initialization sequence and set of the dependencies involved.
Code Block |
---|
final MeterRegistry registry = ...; /* Micrometer MeterRegistry instance */
final JaxrsTags jaxrsTags = new JaxrsTags();
final TagsCustomizer operationsCustomizer = new JaxrsOperationTagsCustomizer(jaxrsTags);
final TagsProvider tagsProvider = new StandardTagsProvider(new DefaultExceptionClassProvider(), new StandardTags());
final MicrometerMetricsProperties properties = new MicrometerMetricsProperties();
final MetricsProvider metricsProvider = new MicrometerMetricsProvider(registry, tagsProvider,
Arrays.asList(operationsCustomizer), new DefaultTimedAnnotationProvider(), properties);
final JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
factory.setFeatures(Arrays.asList(new MetricsFeature(metricsProvider)));
... |
Client (since 3.3.9 / 3.4.2)
The client integration is no different from the server and uses the same MetricsFeature feature.
Code Block |
---|
final MeterRegistry registry = ...; /* Micrometer MeterRegistry instance */
final JaxrsTags jaxrsTags = new JaxrsTags();
final TagsCustomizer operationsCustomizer = new JaxrsOperationTagsCustomizer(jaxrsTags);
final TagsProvider tagsProvider = new StandardTagsProvider(new DefaultExceptionClassProvider(), new StandardTags());
final MicrometerMetricsProperties properties = new MicrometerMetricsProperties();
final MetricsProvider metricsProvider = new MicrometerMetricsProvider(registry, tagsProvider,
Arrays.asList(operationsCustomizer), new DefaultTimedAnnotationProvider(), properties);
final JAXRSClientFactoryBean factory = new JAXRSClientFactoryBean();
factory.setFeatures(Arrays.asList(new MetricsFeature(metricsProvider)));
... |