rabbitConnectionFactory автоматически определяется для экспозиции JMX - PullRequest
0 голосов
/ 07 мая 2019

У меня есть приложение Spring Boot, которое поддерживает Kafka.В последнее время я пытаюсь сделать так, чтобы он также поддерживал RabbitMQ.Я настроил код, используя аннотацию @Profile, чтобы весь новый код для RabbitMQ был активным, только если я выбрал spring.profiles.active, чтобы быть rabbit-mq.Аналогичным образом, код, специфичный для Kafka, выделен значением профиля kafka

. Я был удивлен, увидев, что даже при вышеупомянутой настройке, когда я устанавливаю профиль на kafka, некоторые RabbitMQ все еще работают.включается и активируется через механизм выдержка JMX .В частности, был создан bean-компонент rabbitConnectionFactory, а затем он попытался выполнить проверку работоспособности с помощью брокера RabbitMQ на localhost:5672 и не смог.

В файле журнала я увидел следующие сообщения:

... o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
... o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
... o.s.j.e.a.AnnotationMBeanExporter        : Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
... o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483547
... o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
... o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
... c.s.datacomparatorproducer.Application   : Started Application in 5.175 seconds (JVM running for 5.663)
... o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
... o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
... o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 15 ms
... o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [localhost:5672]
... o.s.b.a.amqp.RabbitHealthIndicator       : Rabbit health check failed

org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)
        at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:62) ~[spring-rabbit-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
        at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:476) ~[spring-rabbit-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:614) ~[spring-rabbit-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
        at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:240) ~[spring-rabbit-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1797) ~[spring-rabbit-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1771) ~[spring-rabbit-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]

У меня два вопроса:

  1. Как можно избежать включения кода RabbitMQ?Почему мои настройки с использованием @Profile не работали должным образом?
  2. Как мне настроить rabbitConnectionFactory?В настоящее время он пытается поговорить с localhost:5672.Я знаю, как вообще настроить шаблон Spring для использования application-xxx.properties для spring.rabbitmq.{host,port}, но в этом случае, поскольку код включен автоматически, я не знаю, как настроить rabbitConnectionFactory

Обычная конфигурация

spring.rabbitmq.host=someRabbitBroker
spring.rabbitmq.port=5672

Обновление

Попытка 1: исключая RabbitAutoConfiguration

Спасибо Гэри Расселу за предложение.Я попробовал его метод и изменил свой @SpringBootApplication следующим образом.Идея здесь состоит в том, чтобы исключить RabbitAutoConfiguration, когда spring.rabbitmq.host НЕ определен (когда профиль rabbit-mq не активен):

@SpringBootApplication
public class Application {

    @ConditionalOnProperty(value="spring.rabbitmq.host")
    @Bean 
    RabbitAutoConfiguration rabbitAutoConfiguration(){
        return new RabbitAutoConfiguration();
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Я не уверен, является ли этот код правильным способомсделать это, но это не сработало.Когда мое приложение запустилось, я все еще видел это в сообщении:

... o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
... o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
... o.s.j.e.a.AnnotationMBeanExporter        : Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
... o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483547

Я в порядке с созданием компонента, пока я могу мешать ему выполнять проверку работоспособности (или, по крайней мере, настроить его на использованиемой назначенный хост и порт).Есть ли способ сделать это?

1 Ответ

2 голосов
/ 07 мая 2019

Вам нужно либо исключить банку с пружинным кроликом из classpath, либо отключить автоконфигурацию rabbitmq, исключив RabbitAutoConfiguration из @SpringBootApplication.

Обновление: отключение проверки работоспособности

См. документацию по свойствам загрузки . Специально установить management.health.rabbit.enabled в false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...