如何为RabbitMQ连接设置自定义名称?

如何为RabbitMQ连接设置自定义名称?,rabbitmq,spring-cloud-stream,Rabbitmq,Spring Cloud Stream,能够通过连接名识别RabbitMQ客户机将非常有用 我正在使用Spring Cloud Streams抽象,在默认设置下,我得到了如下结果: 如何在Spring引导客户端中设置自定义RabbitMQ连接名称 编辑 弹簧靴1.7+ 这是基于Gary Russell的答案的解决方案: @Configuration public class MessagingConfiguration { private final String instanceId = UUID.randomUUID(

能够通过连接名识别RabbitMQ客户机将非常有用

我正在使用Spring Cloud Streams抽象,在默认设置下,我得到了如下结果:

如何在Spring引导客户端中设置自定义RabbitMQ连接名称


编辑 弹簧靴1.7+ 这是基于Gary Russell的答案的解决方案:

@Configuration
public class MessagingConfiguration {
    private final String instanceId = UUID.randomUUID().toString().substring(0, 8); // TODO: Environment/Consul/Eureka
    private final String connectionNamePrefix;
    private AtomicInteger connectionNumber = new AtomicInteger(0);

    public MessagingConfiguration(@Value("${custom.rabbitmq.connection-name-prefix:SpringBootApp}") String connectionNamePrefix) {
        this.connectionNamePrefix = connectionNamePrefix;
    }

    private String generateConnectionName() {
        return connectionNamePrefix + '#' + instanceId + ':' +  connectionNumber.getAndIncrement();
    }

    @Bean
    public SmartInitializingSingleton reconfigureConnectionFactory(final AbstractConnectionFactory cf) {
        return () -> cf.setConnectionNameStrategy(f -> generateConnectionName());
    }
}
它可以和一起工作,但不能在一段时间内工作

弹簧靴2.0.1+ 请注意,在多活页夹方案中存在一个链接。

从2.0 1.7版(请参阅)开始,您可以提供一个
连接名称策略

@Bean
public CachingConnectionFactory connectionFactory() {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    cf.setConnectionNameStrategy(f -> "myConnectionName");
    return cf;
}

编辑

可以在连接打开之前的任何时间设置策略。比如说,如果您想使用SpringBoot的自动配置工厂(默认情况下由SpringCloudStream使用),您可以这样做

@Bean
public SmartInitializingSingleton reconfigureCf(final CachingConnectionFactory cf) {
    return () -> cf.setConnectionNameStrategy(f -> "myName");
}
这将在执行任何操作之前运行
start()
ed


实际上,它是后端口到的。

谢谢,但通过这种方式,我必须创建自己的ConnectionFactory,对其进行配置等。我只想注入我的ConnectionNameStrategy,仅此而已。有什么方法可以做到吗?谢谢你的魔力:)它可以用,但当我使用它时就不起作用了。是否有机会为类似以下属性的内容添加自动配置支持:
spring.rabbitmq.connection name prefix
?这需要对引导进行更改,因为每个绑定都加载到单独的应用程序上下文中。顺便说一句,它看起来总是用
springboot2.0
springcloudfinchley.M8继承默认环境。在相同配置下,它可以与Spring Boot 1.5.9和Spring Cloud Edgware.SR2一起正常工作。我应该在哪里发布这个问题?我将从stream开始。举个例子来说明这种行为会有所帮助。
@Bean
public SmartInitializingSingleton reconfigureCf(final CachingConnectionFactory cf) {
    return () -> cf.setConnectionNameStrategy(f -> "myName");
}