Spring-动态创建JMSTemplates
我正在使用Spring
boot,我想动态创建多个JMS模板,因为我想连接到不同的JMS实例。我知道使用注释的标准方法,该方法将ConnectionFactory链接到JMSTemplate。我希望每个不同的JMS实例都有一个不同的JMSTemplate。
我将连接详细信息当前加载到Map中,我想为每个键动态创建一个JMSTemplate。
主要目的是基于地图查找将消息发布到主题目的地。但是对于测试来说,也可能会有听众。
可能的方法:
1)将JMSTemplates添加到与Spring Component关联的映射,并在spring组件Map上查找JMSTemplate。
2)如何使用以下方法动态注册多个jmsTemplate bean:
BeanDefinitionBuilder builder =
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”);
哪种方法比较有利?
请指教。
乙
回答:
因此,如果ConnectionFactory
地图中有对象,则可以创建的相似地图JmsTemplate
。使用此JmsTempalte构造函数,并在一个循环(或流)之后,可以得到JmsTemplate
s的映射。因此发送很容易。
更难的部分是听众。如果您有动态目标,则需要忽略侦听器注释(@JmsListener
)。您可以通过创建的地图来使其正常工作DefaultMessageListenerContainer
。
每个容器都将通过以下方式创建:
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();container.setConnectionFactory(connectionFactory);
container.setDestination(topic);
container.setMessageListener(listenerInstance);
container.start();
您还可以通过停止,关闭…来控制每个侦听器容器的生命周期。
但是请记住,以这种方式处理许多队列可能会占用大量资源。另外,您可能需要自己关闭资源(Spring不会为您完成)。
以上是 Spring-动态创建JMSTemplates 的全部内容, 来源链接: utcz.com/qa/416723.html