首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"jmsListenerContainerFactory“是SimpleJmsListenerEndpoint使用的默认工厂吗?

"jmsListenerContainerFactory“是SimpleJmsListenerEndpoint使用的默认工厂吗?
EN

Stack Overflow用户
提问于 2014-11-12 10:02:15
回答 2查看 7.5K关注 0票数 3

我正在使用SpringJMS4.1注册消息侦听器

在我的xml配置文件中,我定义了一个名为“jmsListenerContainerFactory”的bean:

代码语言:javascript
复制
<bean id="jmsListenerContainerFactory"
          class="org.springframework.jms.config.DefaultJmsListenerContainerFactory"...p:concurrency="3-5".../>
  • 第一个问题:使用Spring4.x版本,这样声明工厂不是更好吗:<jms:listener-container ... />
  • 第二个也是主要的问题:正如官方文档(24.6.1)中所述:在默认情况下,基础设施寻找一个名为jmsListenerContainerFactory的bean作为工厂用来创建消息侦听器容器的源。如果以编程方式以这种方式注册端点,情况是否也是这样:

代码语言:javascript
复制
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setDestination("...");
endpoint.setMessageListener(message -> {...});
registrar.registerEndpoint(endpoint);

还是我们必须以这样的方式显式地设置它?例如:registrar.setContainerFactoryBeanName("jmsListenerContainerFactory");

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-12 18:50:32

我不理解您的第一个问题;在第一个例子中,您定义的是一个DefaultJmsListenerContainerFactory (一个创建侦听器容器的工厂),而XML是直接创建一个侦听器容器。

如果您需要创建许多具有类似属性的容器,那么工厂是很有用的。

对于简单的容器配置,当您不使用带注释的侦听器时,对容器使用传统的XML或@Bean定义肯定会更简单。

对于第二个问题,当容器工厂bean被传递到configureListeners方法时,默认的注册器已经被填充到容器工厂bean名称中;您不必设置它。

票数 1
EN

Stack Overflow用户

发布于 2021-01-19 12:17:16

SimpleJmsListenerEndpoint总是查找名为"jmsListenerContainerFactory“的bean。因此,即使没有显式设置:

代码语言:javascript
复制
registrar.setContainerFactoryBeanName("jmsListenerContainerFactory");

如果存在bean“JmsListenerEndpoint”,JmsListenerContainerFactory仍然可以找到。这意味着,如果您需要应用不同bean名的JmsListenerContainerFactory,那么对registrar.setContainerFactoryBeanName("")方法的设置根本不起作用。

工作和非工作案例的代码:

代码语言:javascript
复制
// config factory class
@Bean(name = "customJMSListenerContainerFactory")
public DefaultJmsListenerContainerFactory 
listenerQueueFactory() {
DefaultJmsListenerContainerFactory factory = new 
DefaultJmsListenerContainerFactory();
//more configs...
return factory;
}

// on consumer class 
@Configuration
@EnableJms
public class MyConsumer implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {

SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
registrar.registerEndpoint(endpoint);
// this setting will not work => Spring JMS bug 
registrar.setContainerFactoryBeanName("customJMSListenerContainerFactory");
// but this setting works
registrar.setContainerFactory(listenerQueueFactory());
 }
}

这是春天的虫子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26884139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档