Browse Source

Move AMQP/Rabbit metrics auto-configuration into spring-boot-amqp

Closes gh-46077
pull/46230/head
Andy Wilkinson 8 months ago
parent
commit
e44b9e25e4
  1. 2
      spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle
  2. 1
      spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  3. 16
      spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java
  4. 1
      spring-boot-project/spring-boot-amqp/build.gradle
  5. 2
      spring-boot-project/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/actuate/metrics/autoconfigure/RabbitConnectionFactoryMetricsPostProcessor.java
  6. 12
      spring-boot-project/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/actuate/metrics/autoconfigure/RabbitMetricsAutoConfiguration.java
  7. 2
      spring-boot-project/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/actuate/metrics/autoconfigure/package-info.java
  8. 3
      spring-boot-project/spring-boot-amqp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  9. 19
      spring-boot-project/spring-boot-amqp/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationMeterBinderCycleIntegrationTests.java
  10. 11
      spring-boot-project/spring-boot-amqp/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java

2
spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle

@ -45,7 +45,6 @@ dependencies { @@ -45,7 +45,6 @@ dependencies {
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
optional(project(":spring-boot-project:spring-boot-activemq"))
optional(project(":spring-boot-project:spring-boot-amqp"))
optional(project(":spring-boot-project:spring-boot-artemis"))
optional(project(":spring-boot-project:spring-boot-cache"))
optional(project(":spring-boot-project:spring-boot-couchbase"))
@ -150,7 +149,6 @@ dependencies { @@ -150,7 +149,6 @@ dependencies {
optional("org.springframework:spring-messaging")
optional("org.springframework:spring-webflux")
optional("org.springframework:spring-webmvc")
optional("org.springframework.amqp:spring-rabbit")
optional("org.springframework.batch:spring-batch-core")
optional("org.springframework.data:spring-data-couchbase")
optional("org.springframework.data:spring-data-jpa")

1
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@ -22,7 +22,6 @@ org.springframework.boot.actuate.autoconfigure.logging.OpenTelemetryLoggingAutoC @@ -22,7 +22,6 @@ org.springframework.boot.actuate.autoconfigure.logging.OpenTelemetryLoggingAutoC
org.springframework.boot.actuate.autoconfigure.logging.otlp.OtlpLoggingAutoConfiguration
org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.amqp.RabbitMetricsAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.export.appoptics.AppOpticsMetricsExportAutoConfiguration

16
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java

@ -34,7 +34,6 @@ import org.junit.jupiter.api.BeforeEach; @@ -34,7 +34,6 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.metrics.amqp.RabbitMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration;
@ -146,14 +145,13 @@ class MetricsIntegrationTests { @@ -146,14 +145,13 @@ class MetricsIntegrationTests {
@Configuration(proxyBeanMethods = false)
@ImportAutoConfiguration({ MetricsAutoConfiguration.class, ObservationAutoConfiguration.class,
JvmMetricsAutoConfiguration.class, LogbackMetricsAutoConfiguration.class,
SystemMetricsAutoConfiguration.class, RabbitMetricsAutoConfiguration.class,
CacheMetricsAutoConfiguration.class, DataSourcePoolMetricsAutoConfiguration.class,
HibernateMetricsAutoConfiguration.class, HttpClientObservationsAutoConfiguration.class,
WebFluxObservationAutoConfiguration.class, WebMvcObservationAutoConfiguration.class,
JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class,
RestTemplateAutoConfiguration.class, WebMvcAutoConfiguration.class,
DispatcherServletAutoConfiguration.class, TomcatServletWebServerAutoConfiguration.class,
TomcatServletWebServerAutoConfiguration.class })
SystemMetricsAutoConfiguration.class, CacheMetricsAutoConfiguration.class,
DataSourcePoolMetricsAutoConfiguration.class, HibernateMetricsAutoConfiguration.class,
HttpClientObservationsAutoConfiguration.class, WebFluxObservationAutoConfiguration.class,
WebMvcObservationAutoConfiguration.class, JacksonAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class, RestTemplateAutoConfiguration.class,
WebMvcAutoConfiguration.class, DispatcherServletAutoConfiguration.class,
TomcatServletWebServerAutoConfiguration.class, TomcatServletWebServerAutoConfiguration.class })
@Import(PersonController.class)
static class MetricsApp {

1
spring-boot-project/spring-boot-amqp/build.gradle

@ -38,6 +38,7 @@ dependencies { @@ -38,6 +38,7 @@ dependencies {
optional(project(":spring-boot-project:spring-boot-actuator-autoconfigure"))
optional(project(":spring-boot-project:spring-boot-autoconfigure"))
optional(project(":spring-boot-project:spring-boot-docker-compose"))
optional(project(":spring-boot-project:spring-boot-metrics"))
optional(project(":spring-boot-project:spring-boot-testcontainers"))
optional("io.micrometer:micrometer-core")
optional("org.springframework.amqp:spring-rabbit-stream")

2
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitConnectionFactoryMetricsPostProcessor.java → spring-boot-project/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/actuate/metrics/autoconfigure/RabbitConnectionFactoryMetricsPostProcessor.java

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.amqp;
package org.springframework.boot.amqp.actuate.metrics.autoconfigure;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MetricsCollector;

12
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfiguration.java → spring-boot-project/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/actuate/metrics/autoconfigure/RabbitMetricsAutoConfiguration.java

@ -14,19 +14,17 @@ @@ -14,19 +14,17 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.amqp;
package org.springframework.boot.amqp.actuate.metrics.autoconfigure;
import com.rabbitmq.client.ConnectionFactory;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory;
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
import org.springframework.boot.amqp.actuate.metrics.RabbitMetrics;
import org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@ -37,9 +35,9 @@ import org.springframework.context.annotation.Bean; @@ -37,9 +35,9 @@ import org.springframework.context.annotation.Bean;
* @author Stephane Nicoll
* @since 2.0.0
*/
@AutoConfiguration(after = { MetricsAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class },
afterName = "org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration")
@ConditionalOnClass({ ConnectionFactory.class, AbstractConnectionFactory.class, RabbitMetrics.class })
@AutoConfiguration(afterName = "org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration",
after = RabbitAutoConfiguration.class)
@ConditionalOnClass({ ConnectionFactory.class, AbstractConnectionFactory.class, MeterRegistry.class })
@ConditionalOnBean({ org.springframework.amqp.rabbit.connection.ConnectionFactory.class, MeterRegistry.class })
public class RabbitMetricsAutoConfiguration {

2
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/package-info.java → spring-boot-project/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/actuate/metrics/autoconfigure/package-info.java

@ -17,4 +17,4 @@ @@ -17,4 +17,4 @@
/**
* Auto-configuration for RabbitMQ metrics.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.amqp;
package org.springframework.boot.amqp.actuate.metrics.autoconfigure;

3
spring-boot-project/spring-boot-amqp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@ -1,2 +1,3 @@ @@ -1,2 +1,3 @@
org.springframework.boot.amqp.actuate.health.autoconfigure.RabbitHealthContributorAutoConfiguration
org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration
org.springframework.boot.amqp.actuate.metrics.autoconfigure.RabbitMetricsAutoConfiguration
org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration

19
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationMeterBinderCycleIntegrationTests.java → spring-boot-project/spring-boot-amqp/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationMeterBinderCycleIntegrationTests.java

@ -18,16 +18,20 @@ package org.springframework.boot.actuate.autoconfigure.metrics.amqp; @@ -18,16 +18,20 @@ package org.springframework.boot.actuate.autoconfigure.metrics.amqp;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.MeterBinder;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
import org.springframework.boot.amqp.actuate.metrics.autoconfigure.RabbitMetricsAutoConfiguration;
import org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration;
import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration test to check that {@link RabbitMetricsAutoConfiguration} does not cause a
* dependency cycle when used with {@link MeterBinder}.
@ -40,24 +44,33 @@ class RabbitMetricsAutoConfigurationMeterBinderCycleIntegrationTests { @@ -40,24 +44,33 @@ class RabbitMetricsAutoConfigurationMeterBinderCycleIntegrationTests {
@Test
void doesNotFormCycle() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TestConfig.class);
context.getBean(TestService.class);
TestService testService = context.getBean(TestService.class);
context.close();
assertThat(testService.bound).isTrue();
}
@Configuration
@Import({ TestService.class, RabbitAutoConfiguration.class, MetricsAutoConfiguration.class,
SimpleMetricsExportAutoConfiguration.class, RabbitMetricsAutoConfiguration.class })
RabbitMetricsAutoConfiguration.class })
static class TestConfig {
@Bean
SimpleMeterRegistry meterRegistry() {
return new SimpleMeterRegistry();
}
}
static class TestService implements MeterBinder {
private boolean bound;
TestService(RabbitTemplate rabbitTemplate) {
}
@Override
public void bindTo(MeterRegistry registry) {
this.bound = true;
}
}

11
spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java → spring-boot-project/spring-boot-amqp/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java

@ -17,13 +17,15 @@ @@ -17,13 +17,15 @@
package org.springframework.boot.actuate.autoconfigure.metrics.amqp;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
import org.springframework.boot.amqp.actuate.metrics.autoconfigure.RabbitMetricsAutoConfiguration;
import org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -37,8 +39,11 @@ import static org.assertj.core.api.Assertions.assertThat; @@ -37,8 +39,11 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class RabbitMetricsAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().with(MetricsRun.simple())
.withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class, RabbitMetricsAutoConfiguration.class));
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class, RabbitMetricsAutoConfiguration.class,
MetricsAutoConfiguration.class))
.withPropertyValues("management.metrics.use-global-registry=false");
@Test
void autoConfiguredConnectionFactoryIsInstrumented() {
Loading…
Cancel
Save