Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot rabbitConnectionFactory自动检测到JMX曝光_Spring Boot_Rabbitmq_Spring Amqp - Fatal编程技术网

Spring boot rabbitConnectionFactory自动检测到JMX曝光

Spring boot rabbitConnectionFactory自动检测到JMX曝光,spring-boot,rabbitmq,spring-amqp,Spring Boot,Rabbitmq,Spring Amqp,我有一个支持Kafka的Spring Boot应用程序。最近我试图使它也支持RabbitMQ。我使用@Profile注释设置代码,这样,只有当我选择spring.profiles.active为RabbitMQ时,RabbitMQ的所有新代码才应处于活动状态。同样,卡夫卡特定代码由Kafka 我惊讶地发现,即使使用上述设置,当我将概要文件设置为kafka时,仍然包括一些RabbitMQ并通过机制JMX exposure激活。具体地说,构建了一个rabbitConnectionFactorybea

我有一个支持Kafka的Spring Boot应用程序。最近我试图使它也支持RabbitMQ。我使用
@Profile
注释设置代码,这样,只有当我选择
spring.profiles.active
RabbitMQ
时,RabbitMQ的所有新代码才应处于活动状态。同样,卡夫卡特定代码由
Kafka

我惊讶地发现,即使使用上述设置,当我将概要文件设置为
kafka
时,仍然包括一些RabbitMQ并通过机制JMX exposure激活。具体地说,构建了一个
rabbitConnectionFactory
bean,然后它尝试在
localhost:5672
上使用RabbitMQ代理进行运行状况检查,但失败了

在日志文件中,我看到以下消息:

... 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]
我有两个问题:

  • 如何避免包含RabbitMQ代码?为什么我使用
    @Profile
    进行的设置没有按预期工作
  • 如何配置rabbitConnectionFactory?目前它正在尝试与
    localhost:5672
    对话。一般来说,我知道如何设置Spring模板以使用
    Spring.rabbitmq.{host,port}
    application xxx.properties
    ,但在这种情况下,由于代码是自动包含的,我不知道如何配置
    rabbitConnectionFactory
  • 常规配置

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

    尝试1:排除
    兔子自动配置

    谢谢加里·拉塞尔的建议。我尝试了他的方法,并将我的
    @springbootplication
    更改如下。这里的想法是在未定义
    spring.rabbitmq.host
    时(当
    rabbitmq
    的配置文件未激活时),排除
    RabbitAutoConfiguration

    我不确定这段代码是否是正确的方法,但它不起作用。当我的应用程序启动时,我仍然在消息中看到以下内容:

    ... 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
    

    只要我能阻止bean进行运行状况检查(或者至少将其配置为使用我指定的主机和端口),我就可以构造bean。有办法做到这一点吗?

    您需要从类路径中排除spring rabbit jar,或者通过从
    @SpringBootApplication
    中排除
    RabbitAutoConfiguration
    来禁用rabbitmq自动配置

    更新:禁用健康检查


    看。对于我的第二个问题,专门将
    management.health.rabbit.enabled
    设置为
    false

    。。。作为一个黑客,我可以将
    spring.rabbitmq.{host,port}
    的那些行放入文件
    应用程序kafka.properties
    中,然后将它们取下来。但很明显,这是一个肮脏的黑客行为,我想知道一个合适的解决方案。谢谢Gary Russell的建议。我尝试了第二种方法--排除了
    RabbitAutoConfiguration
    ,但它不起作用。我把代码放在上面更新的问题中。你能检查一下我的代码是否正确吗?或者,正如我所说,有没有一种方法可以让我停止进行健康检查呢?请参阅。特别设置
    management.health.rabbit.enabled
    false
    。是的,它就像一个符咒。谢谢!我已经更新了你的答案并接受了。你救了我一天!
    ... 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