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

2024-01-31

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

我正在使用 Spring Cloud Streams 抽象,并且使用默认设置我得到类似的东西:

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


EDIT

春季启动 1.7+

这是基于加里·拉塞尔答案的解决方案:

@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());
    }
}

它与默认配置 https://github.com/wildloop/streams-demo/blob/master/src/main/resources/application-1vh.yml,但不适用于多系统连接 https://github.com/wildloop/streams-demo/blob/master/src/main/resources/application-2vh.yml.

春季启动 2.0.1+

@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 ConnectionNameStrategy defineConnectionNameStrategy() {
        return connectionFactory -> generateConnectionName();
    }
}

注意,有一个bug https://github.com/spring-cloud/spring-cloud-stream/issues/1541在多绑定器场景中。


从版本 2.0 1.7 开始(请参阅文档 https://docs.spring.io/spring-amqp/reference/html/_reference.html#connections)你可以提供一个ConnectionNameStrategy...

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

EDIT

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

@Bean
public SmartInitializingSingleton reconfigureCf(final CachingConnectionFactory cf) {
    return () -> cf.setConnectionNameStrategy(f -> "myName");
}

这将在任何事情发生之前运行start()ed.

实际上它被向后移植到1.7.x https://jira.spring.io/browse/AMQP-684.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 RabbitMQ 连接设置自定义名称? 的相关文章

随机推荐

  • 如果在finalize()期间抛出异常会发生什么

    如果finalize 执行过程中抛出异常会发生什么 堆栈展开是否像平常一样 它会继续finalize 并忽略异常吗 它会停止 Finalize 并继续 GC 对象吗 或者是其他东西 我不是在寻找使用 Finalize 的指南 有很多页面对此
  • 可以比较 mongodb 中的日期字符串吗?

    我有一个包含具有日期属性的文档的集合 如下所示 title whatever created ISODate 2013 05 27T03 36 50Z 我想选择在某一天创建的记录 我希望我能用toDateString 并比较这些值 但是当我
  • 通过拆分将 pandas DataFrame 从宽变为长

    我正在尝试将以下数据从宽格式重塑为长格式 df pd DataFrame size Ent pd Timestamp 2021 01 01 00 00 00 600 pd Timestamp 2021 01 02 00 00 00 930
  • STS Spring 与 Roo 和 Maven - 太慢?

    我有一段时间使用 STS 和 Java 来开发 Web 应用程序 该项目配置为使用 Maven Roo 和 MySQL 作为数据库 我经常发现我在以下情况中浪费了很多时间 没有Roo回应 当我修改域对象 Java 类时 即使项目的 Roo
  • 机器学习、人工智能和软计算

    这三个密切相关的领域有什么区别 是否存在一个特定的整体 它们都是其中的一部分 除了 CS 人工智能是试图在计算机中捕获人类智能的各个方面的智力项目 另一个项目也称为人工智能 旨在使用受人类启发的算法来解决传统上棘手的问题 人工智能可以说涵盖
  • 如何用python实现Leaky Relu的导数?

    在不使用 Tensorflow 的情况下 如何在 Python 中实现 Leaky ReLU 的导数 还有比这更好的方法吗 我希望该函数返回一个 numpy 数组 def dlrelu x alpha 01 return alpha if
  • 为什么我必须在左移之前将 `uint8_t` 转换为 `uint64_t` ?

    我只想将 uint8 t 数组连接到 uint64 t 事实上 我解决了我的问题 但需要了解原因 这是我的代码 uint8 t byte array 5 byte array 0 0x41 byte array 1 0x42 byte ar
  • 在 Scala 中导入 avro 模式

    我正在编写一个简单的 Twitter 程序 我正在使用 Kafka 阅读推文 并希望使用 Avro 进行序列化 到目前为止 我刚刚在 Scala 中设置了 twitter 配置 现在想使用此配置来阅读推文 如何导入程序中文件 tweets
  • 将 SSIS 连接到 PostgreSQL 时出现问题(通过 OLEDB)

    我正在开发一个项目 我必须为数据迁移创建 SSIS 包 我使用 PostgreSQL 进行数据库连接 最初 我使用 ODBC 驱动程序将 SSIS 项目连接到 PostgreSQL 后来 我发现 ODBC 不支持在发生任何故障时回滚以前的事
  • 为什么ProgressDialog的背景没有设置为透明?

    我想将背景设置为透明 所以我在中设置了以下代码 styles xml
  • 避免“缓冲区溢出”C6386 警告

    在我的代码中 我使用数组xyz共 10 个对象 当我尝试使用 unsigned int 索引访问数组的元素时 如下所示 xyz level I get 缓冲区溢出 http msdn microsoft com en us library
  • 将所有函数折叠到 R-Studio 脚本中

    基本上我已经在一个 R 脚本中编写了相当多的函数 为了创建更好的概述并且不必滚动太多 我通常按函数定义左侧的箭头 将其折叠 对于 30 多个函数来说 这可能非常烦人 因为当我运行它们时 它们会不断 展开 我所说的折叠的意思可以在这张照片中看
  • code::blocks 是否保留除 C++ 关键字之外的名称?

    我是 code blocks 的新手 而且在 C 方面也没有经验 我知道有很多关键字 我不应该将它们用于变量名称 并且它们通常以不同的颜色显示 就像在 Visualstudio 中一样 现在 当我将一些代码片段从旧的 vs 项目复制到新的
  • Azure - 无法连接到 RDP

    我必须更改管理员密码 因为它已通过 RDP 过期 更改后服务器工作正常 后来我断开了会话 然后再次启动它 现在我们收到以下错误消息 发生身份验证错误 无法联系当地安全机构 远程计算机 cloudapp net 即使两台服务器重新启动后 同样
  • 实际安装模块时 pip install 期间出现 ModuleNotFoundError

    我尝试使用安装 python 包 BentoML pip install bentoml 我收到以下错误 该错误给出了ModuleNotFoundError No module named wrapt 但是 那wrapt模块实际上包含在我的
  • 使用 Powershell 将文件检入 TFS

    作为持续集成构建的一部分 我正在创建一个 SQL 脚本 该 SQL 脚本生成后必须重新签入 TFS 我在 Powershell 中使用 TFS Powertools 我在我的机器上使用的代码是 Add TfsPendingChange Ad
  • iOS 7 UIWebView 304 缓存错误,空白页

    我在具有 UIWebView 的应用程序中发现了一个问题 iOS 7 缓存了空白正文 304 响应 导致用户刷新 UIWebView 时显示空白页面 这不是良好的用户体验 我正在尝试找出如何在 iOS 端解决此问题 因为我无法控制 Amaz
  • unmodifierList 线程安全吗?

    我有一个字符串 tagList 列表 需要在多个线程之间共享以供读取 因此我创建了它的不可修改版本并将其传递给线程 我不确定它是否是线程安全的 因为线程只读取该列表 所以我猜应该可以吧 另外 当我将不可修改的列表传递给线程时 它是传递单个副
  • 将自纪元以来的时间戳转换为 datetime.datetime

    自纪元以来我有以下时间戳 Timestamp 1346114717972 1354087827000 如何将这些时间戳转换为某种特定的输出格式 例如mm dd yyyy hr min sec 我尝试将它们转换为datetime dateti
  • 如何为 RabbitMQ 连接设置自定义名称?

    能够通过连接名称识别 RabbitMQ 客户端将非常有用 我正在使用 Spring Cloud Streams 抽象 并且使用默认设置我得到类似的东西 如何在 Spring Boot 客户端中设置自定义 RabbitMQ 连接名称 EDIT