gpt4 book ai didi

java - Spring - 动态创建 JMSTemplates

转载 作者:行者123 更新时间:2023-11-30 10:58:16 25 4
gpt4 key购买 nike

我正在使用 Spring boot,我想动态创建多个 JMS 模板,因为我想连接到不同的 JMS 实例。我知道使用注释的标准方法,将 ConnectionFactory 链接到 JMSTemplate。我希望每个不同的 JMS 实例都有不同的 JMSTemplate。

我当前已将连接详细信息加载到 Map 中,我想为每个键动态创建一个 JMSTemplate。

主要目的是根据 map 查找将消息发布到主题目的地。但是为了测试,也可以有听众。

可能的方法:

1) 将 JMSTemplates 添加到与 Spring 组件关联的映射中,并在 spring 组件映射中查找 JMSTemplate。

2) 使用以下方法动态注册多个 jmsTemplate bean 怎么样:

BeanDefinitionBuilder 构建器 = BeanDefinitionBuilder.rootBeanDefinition(JmsTemplate.class); CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();

         builder.addPropertyValue("connectionFactory", cachingConnectionFactory);      // set property value
DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getAutowireCapableBeanFactory();
factory.registerBeanDefinition("jmsTemplateName", builder.getBeanDefinition());

然后查找 jms bean -> ctx.getBean("jmsTemplateName");

哪种方法是有利的?

请指教。

B

最佳答案

因此,如果映射中有 ConnectionFactory 对象,则可以创建类似的 JmsTemplate 映射。使用这个 JmsTempalte contructor在一个循环(或流)之后,您可以获得 JmsTemplate 的映射。所以发送很容易。

更难的部分是听众。如果您有动态目标,则需要忘记监听器注释 (@JmsListener)。您可以通过创建 DefaultMessageListenerContainer 的映射来使其工作。

每个容器都将通过以下方式创建:

DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setDestination(topic);
container.setMessageListener(listenerInstance);
container.start();

您还可以通过停止、关闭...来控制每个监听器容器的生命周期。

但请记住,以这种方式处理大量队列可能会占用大量资源。此外,您可能还需要注意自己关闭资源(Spring 不会为您做这件事)。

关于java - Spring - 动态创建 JMSTemplates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com