当前位置: 首页 > 知识库问答 >
问题:

如何配置rabbit连接工厂但保持Spring Boot自动配置?

廖永长
2023-03-14

我想以编程方式设置org.springframework.amqp.rabbit.connection.CachingConnectionFactory上的主机属性。我想保留Spring Boot自动配置的默认值和来自我的应用程序的值-{profile name}。yml文件,因此出于这些原因,我不想简单地创建自己的cachingConnectionFactorybean。

我找到了org.springframework.boot.autoconfigure.amqp。ConnectionFactoryCustomizer类,看起来非常有前途,因为我看到了如何在RabbitAutoConfiguration类中调用它来配置底层com.rabbitmq.client。spring框架中的ConnectionFactory CachingConnectionFactory。但是,我不知道如何创建我的ConnectionFactoryCustomizer实例并将其注册为回调,以及如何以正确的顺序调用它(我认为是最后调用的)。

我尝试了这个,但是仍然连接到“localhost”:

@Bean
@Order(Integer.MAX_VALUE)
public ConnectionFactoryCustomizer myConnectionFactoryCustomizer() {
    return factory -> {
        factory.setHost("anotherhost");
    };
}

我也尝试了这种方法,我从另一个stackoverflow帖子中得到了启发,并提出了一个有点类似的问题:如何为RabbitMQ连接设置自定义名称?

@Bean
public SmartInitializingSingleton configureConnectionFactory(final CachingConnectionFactory factory) {
    factory.setHost("anotherhost");
    return () -> {
        factory.setHost("anotherhost");
    };
}

但是这两种方法都不起作用。正在执行调用factory.setHost的代码,所以我显然做错了什么。我的日志输出仍然是这样的:

2021-10-17 13:45:24,271|信息||myContainer-3|org.springframework.amqp.rabbit.connection.CachingConnectionFactory|正在尝试连接到:[本地主机:5672]

那么,在连接工厂中以编程方式重写host等值的正确方法是什么呢?(当然,在创建任何连接之前)

共有1个答案

皮弘博
2023-03-14

Boot 配置 CachingConnectionFactory.addresses 属性(将覆盖主机)。

试试这个。。。

@Bean
@Order(Integer.MAX_VALUE)
public ConnectionFactoryCustomizer myConnectionFactoryCustomizer() {
    return factory -> {
        factory.setHost("anotherhost");
    };
}

@Bean
ApplicationRunner runner(CachingConnectionFactory ccf) {
    ccf.setAddresses(null);
    return args -> {
    };
}

它可以在任何其他bean定义中完成(不一定是运行器),但不能在myConnectionFactoryCustomizerbean中完成,因为存在循环引用。

@Bean
ApplicationRunner runner(CachingConnectionFactory ccf) {
    ccf.setAddresses(null);
    ccf.setHost("another");
    return args -> {
    };
}
 类似资料:
  • 我最近从GlassFish 4迁移到Wildfly 8.1 我在GlassFish中配置了JMS连接工厂和目标: 在Wildfly中,我进入配置- 但它没有给我和例外,也没有用以前的电子邮件设置发送电子邮件

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 本文向大家介绍浅谈springboot自动配置原理,包括了浅谈springboot自动配置原理的使用技巧和注意事项,需要的朋友参考一下 从main函数说起 一切的开始要从SpringbootApplication注解说起。 其中最重要的就是EnableAutoConfiguration注解,开启自动配置。 通过Import注解导入AutoConfigurationImportSelector。在这

  • 我有一个很好的小Spring Boot JPA web应用程序。它部署在Amazon Beanstalk上,并使用Amazon RDS持久化数据。然而,它并不经常使用,因此会在一段时间后失效,这是一种例外: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是79,870,633毫秒之前。 成功发送到服务

  • 问题内容: 我正在使用POST方法。我需要创建一次,并且应该使用Keep Alive Connection。但是我认为,它每次都会建立一个新的连接。 因此,我需要使用 保持活动 连接。 这是我的代码段,很多帮助将不胜感激。 而且logcat日志是: 问题答案: 10:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动 您正在要求保持活动状态。