Spring-Boot:如何访问多个 JMS 代理 URL

2024-01-26

在 Spring-Boot 中,默认的 ActiveMQ (JMS) 属性是:

spring.activemq.broker-url=tcp://192.168.1.210:9876
spring.activemq.user=admin
spring.activemq.password=secret

如果我想发送到多个broker-url或监听不同的broker-url怎么办?


您无法使用默认值访问两个不同的经纪商Spring-Boot自动配置。

为了解决这个问题,您必须创建自己的配置 Bean,如下例所示:

@Configuration
class JmsUtilsConfiguration {

    @Value("${activemq.broker-one.url}")
    private String brokerOneUrl;

    // Im my case, broker-two is secured -> hence username and password need to be configured
    @Value("${activemq.broker-two.url}")
    private String brokerTwoUrl;

    @Value("${activemq.broker-two.username}")
    private String brokerTwoUser;

    @Value("${activemq.broker-two.password}")
    private String brokerTwoPwd;

    @Bean
    @Primary
    public ConnectionFactory jmsConnectionFactoryOne() {
        return new ActiveMQConnectionFactory(brokerOneUrl);
    }

    @Bean
    public QueueConnectionFactory jmsConnectionFactoryTwo() {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
        activeMQConnectionFactory.setBrokerURL(brokerTwoUrl);
        activeMQConnectionFactory.setUserName(brokerTwoUser);
        activeMQConnectionFactory.setPassword(brokerTwoPwd);
        return activeMQConnectionFactory;
    }

    // JmsListenerContainerFactory declarations
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerFactoryOne(
            ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerFactoryTwo(
            @Qualifier("jmsConnectionFactoryTwo") ConnectionFactory connectionFactory,
            DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }
    
    // JMS Template Declaration
    
    @Bean
    @Primary
    public JmsTemplate jmsTemplateOne() {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(jmsConnectionFactoryOne());
        return jmsTemplate;
    }

    @Bean
    public JmsTemplate jmsTemplateTwo() {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(jmsConnectionFactoryTwo());
        return jmsTemplate;
    }

}

In my application.yml我只是指注入的属性(without设置默认值spring.activemq ones):

activemq:
  broker-one:
    url: tcp://localhost:61616
    local-queue: TEST.LOCAL.INBOUND
  broker-two:
    url: failover:(ssl://myremote-amq-1:61617,ssl://myremote-amq-2:61617)?jms.watchTopicAdvisories=false&timeout=5000&maxReconnectDelay=10000
    username: myuser
    password: mypass
    remote-queue: TEST.REMOTE.QUEUE

在我的侦听器 Bean 中(假设我只想从两个队列中消费)

@Component
public class ConsumeQueuesBean {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConsumeQueuesBean.class);

    @JmsListener(destination = "${activemq.broker-one.local-queue}", containerFactory = "jmsListenerContainerFactoryOne")
    public void onMessageReceiveB1(final Message message) throws JMSException {
        if (message instanceof TextMessage) {
            String text = ((TextMessage) message).getText();
            LOGGER.info(text);
        }
    }


    @JmsListener(destination = "${activemq.broker-two.remote-queue}", containerFactory = "jmsListenerContainerFactoryTwo")
    public void onMessageReceivedB2(final Message message) throws JMSException {
        if (message instanceof TextMessage) {
            String text = ((TextMessage) message).getText();
            LOGGER.info(text);
        }
    }
}

您还可以使用jmsTemplates在配置中定义用于将消息发布到您想要的代理。

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

Spring-Boot:如何访问多个 JMS 代理 URL 的相关文章

  • Java:为什么.class文件中的方法类型包含返回类型,而不仅仅是签名?

    class 文件的常量池中有一个 NameAndType 结构 它用于动态绑定 该类可以 导出 的所有方法都被描述为 签名 返回类型 喜欢 getVector Ljava util Vector 当某些 jar 中方法的返回类型发生更改时
  • Spring Data Jpa OneToMany 同时保存子实体和父实体?

    这是我的父实体 注意 为了简洁起见 删除了 getter setter lombok 注释 Entity public class Board Id GeneratedValue strategy GenerationType IDENTI
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • Spring 从 JBoss 上下文加载 PropertySourcesPlaceholderConfigurer

    我有一个使用 PropertySourcesPlaceholderConfigurer 的 spring 3 1 应用程序加载设置 我想管理测试和生产环境 只需从服务器上下文加载设置覆盖本地文件属性中指定的设置 下一个示例在 Tomcat
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 递归取消 allOf CompletableFuture

    如果我有 CompletableFuture
  • 是否可以创建 Java RAM 磁盘以与 java.io.* API 一起使用?

    我正在使用一个第三方库 它基本上创建一个输出目录 其中包含不同类型的文件和子目录 我希望能够编写单元测试来确认输出正确 我希望能够将库与 RAM 磁盘一起使用 这样库所做的任何事情都不会以任何方式接触实际的磁盘板 这个想法是让测试运行和清理
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • 始终将双精度舍入

    我怎么总是能把一个double to an int 并且永远不要将其四舍五入 我知道Math round double 但我希望它始终向上舍入 所以如果是的话3 2 四舍五入为 4 您可以使用Math ceil method 请参阅Java
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • Java 8:如何创建毫秒、微秒或纳秒的 DateTimeFormatter?

    我需要创建格式化程序来解析具有可选的毫秒 微米或纳秒分数的时间戳 例如 对于我的需求 我看到以下机会 DateTimeFormatter formatter new DateTimeFormatterBuilder append DateT
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 添加 char 和 int

    据我了解 字符是一个字符 即一个字母 一个digit 标点符号 制表符 空格或类似的东西 因此 当我这样做时 char c 1 System out println c 输出 1 正是我所期望的 那么为什么当我这样做时 int a 1 ch
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 如何在richtextbox中打印多个文本框中的值

    我有一个 10 个文本框 它们被命名为 textbox1 textbox2 等等 我想在单个富文本框中打印所有文本框中的值 我有什么办法可以做到这一点吗 我目前正在做的方式是 richTextBox1 Text label1 Text t
  • 如何使用jquery合并2个以上的重复行并对html表中的值求和

    我被困住了html table 我想组合 2 个以上duplicate rows并对重复行中的值求和 我的表示例 Name Amount 约翰 200约翰 300约翰 100哈里什 400哈里什 400 预期结果 Name Amount 约
  • 使用 Sendgrid 在 Azure 上发送简单的电子邮件

    我正在尝试使用发送电子邮件SendGrid on Azure 我按照以下说明进行操作 https learn microsoft com tr tr azure sendgrid dotnet how to send email https
  • bash / cli 中的视觉选择

    有没有办法制作bash use 视觉选择 for 文本替换 标准文本输入约定不起作用 如果按 Shift 向左箭头 则应在视觉上选择左侧的字符 如果按 Ctrl 向左箭头 光标应移动到上一个单词的开头 如果按 Shift Ctrl 向左箭头
  • 未找到主类,IntelliJ 正在构建 jar

    当我尝试运行在 IntelliJ 中创建的 jar 文件时遇到问题 我按照此处列出的步骤进行操作 如何正确从 IntelliJ 构建 jar https stackoverflow com questions 1082580 how to
  • mysql 中的月份星期函数

    我正在寻找一个简单的函数来在 mysql 查询中获取该月的第几周 而不是一年中的简单星期 我能想到的最好的办法是 WEEK dateField WEEK DATE SUB dateField INTERVAL DAYOFMONTH date
  • 设置无线电输入的样式

    所以我在设计单选按钮时遇到了很大的麻烦 因此我设法让它在 Chrome 中完美运行 在 Firefox 中运行得很好 在 IE 中则完全不行 This is the expected look in Chrome This is how i
  • bash:如何传递包含特殊字符的密码

    我有一个 bash 脚本来从网站下载数据 为此 我需要使用网站的 java 客户端传递用户名和密码 我的密码包含一个导致问题的特殊字符 我已经尝试了通常的解决方案 但没有一个有效 bin sh cwd MYPASSWORD password
  • 浏览器只对域名或整个 url 进行 punycode 编码吗?

    我正在阅读有关 IDN 同形异义词攻击的内容 但没有找到确切说明浏览器是否仅在 punycode 中编码域或包含 URL 的其余部分 路径和查询 所以我的问题是流行的浏览器之一 FF IE Chrome Safari Opera 是否使用
  • 使用python发送gmail失败

    1 点错误 I did pip install smtplib 然后它说 Could not find a version that satisfies the requirement smtplib from versions No ma
  • python collections.defaultdict() 编译错误

    下面的代码足够简单明了 但在编译时会产生错误 import string import collections create dictionary with alphabets as keys and empty values list a
  • mpl_finance 无法将 -100000 转换为日期

    我正在尝试使用 mpl finance 制作一个简单的烛台 ohlc 图表 在他们的网站上 它说 Candlestick ohlc 方法的引用参数中的第一个元素是日期 它说它们必须采用浮点日期格式 然而 当我使用 date2num 时 它会
  • 如何模拟按键

    我了解 AutoHotKey 但我想制作自己的程序 例如让它每 10 秒按一次 F5 我搜索了互联网和 Stack Overflow 但没有找到解决方案 有没有办法用C实现 我正在使用并定位 Windows 8 1 你想使用SendInpu
  • 无法为具有多个返回值的查询创建 TypedQuery

    我正在使用以下 JPA 查询 并且收到 java lang IllegalArgumentException Cannot create TypedQuery for query with more one return Exception
  • 设置DataGridView.DataSource后获取空白行

    有人能告诉我为什么运行此代码后会出现空白行吗 dataGridView AutoGenerateColumns false must be false else getting additional columns from SQL dat
  • Zend_Form_Element_MultiSelect 元素定义

    有什么方法可以定义默认情况下选择 Zend Form Element MultiSelect 中的哪些选项 element new Zend Form Element MultiCheckbox foo array multiOptions
  • 在 C# 中为同步/异步任务添加重试/回滚机制的最佳方法是什么?

    想象一个 WebForms 应用程序 其中有一个名为 CreateAll 的主方法 我可以将方法任务的过程逐步描述如下 1 存储到数据库 更新 创建数据库项3 4次 2 开始新线程 3 Result1 调用肥皂服务 并通过使用超时阈值检查状
  • 在代码隐藏中动态更改 XAML 样式,以便应用该样式的控件也反映更改

    我希望能够从 WPF 窗口中的 cs 文件设置样式属性 和值 我的问题是 如果我有 30 个矩形 我希望所有矩形都具有相同的样式 并且我不想单独更新所有矩形 我希望将它们全部设置 在 xaml 文件中 为相同的样式 然后更新样式以使其看起来
  • 如何将 Unix 纪元转换为时间戳

    我是 postgresql bot 的新手 而不是一般的 sql 我有一个表 我需要从中读取值 其中一列是一个 unix 时间戳 我想将其转换为更易于阅读的格式 因此我发现了这一点 SELECT lt dw up to char uxts
  • Spring-Boot:如何访问多个 JMS 代理 URL

    在 Spring Boot 中 默认的 ActiveMQ JMS 属性是 spring activemq broker url tcp 192 168 1 210 9876 spring activemq user admin spring