java jmstemplate_java – Spring – 动态创建JMSTemplates

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

我有当前加载到Map中的连接细节,我想为每个键动态创建一个JMSTemplate.

主要目的是基于地图查找将消息发布到主题目标.但是对于测试来说,也可以有听众.

潜在方法:

1)将JMSTemplates添加到与Spring Component关联的映射中,并在spring组件映射上查找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对象,则可以创建类似的JmsTemplates地图.使用此JmsTempalte contructor并在一个循环(或流)之后,您可以拥有JmsTemplates的映射.所以发送很容易.

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

每个容器都将由以下内容创建:

DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();

container.setConnectionFactory(connectionFactory);

container.setDestination(topic);

container.setMessageListener(listenerInstance);

container.start();

您还可以通过停止,关闭,….控制每个侦听器容器的生命周期.

但请记住,以这种方式处理大量队列可能会占用大量资源.此外,您可能需要小心自己关闭资源(Spring不会为您做到这一点).

标签:java,spring,spring-boot,jms

来源: https://codeday.me/bug/20191006/1859339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值