如何为RabbitMQ连接设置自定义名称?
能够通过连接名识别RabbitMQ客户机将非常有用 我正在使用Spring Cloud Streams抽象,在默认设置下,我得到了如下结果: 如何在Spring引导客户端中设置自定义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(
编辑 弹簧靴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");
}