我有一个使用JMS(ActiveMQ)的Spring App
我有以下内容:
@Bean
public DefaultJmsListenerContainerFactory jmsListenerQueueContainerFactoryForSection01(ConnectionFactory selectedConnectionFactory) {
DefaultJmsListenerContainerFactory djlcf = new DefaultJmsListenerContainerFactory();
djlcf.setClientId("jmsListenerQueueContainerFactoryForSection01");
djlcf.setConnectionFactory(selectedConnectionFactory);
djlcf.setPubSubDomain(false);
djlcf.setConcurrency("1");
djlcf.setAutoStartup(true);
djlcf.setSubscriptionDurable(false);
return djlcf;
}
关于@JmsListener
我有:
@JmsListener(destination="springintegration.queue.local.to.section01",
containerFactory="jmsListenerQueueContainerFactoryForSection01")
public void receiveToSection01(Message message){
logger.info("receiveToSection01: {}", message.toString());
}
我可以在 Active Subscribers ActiveMQ
jmsListenerQueueContainerFactoryForSection01
网络控制台中确认
直到这里我很好。
现在,如果我使用@JmsListener
的 id 属性,例如:
@JmsListener(destination="springintegration.queue.local.to.section01",
id="abc",
containerFactory="jmsListenerQueueContainerFactoryForSection01")
public void receiveToSection01(Message message){
logger.info("receiveToSection01: {}", message.toString());
}
我永远无法在id
网络控制台中看到ActiveMQ
abc 。
我总是看到jmsListenerQueueContainerFactoryForSection01
@JmsListener
并发属性可以覆盖DefaultJmsListenerContainerFactory
setConcurrency 方法但它不适用于id
属性。
管理此端点的容器的唯一标识符。 如果未指定,则提供自动生成的文件。
因此
@JmsListener
id 属性?@JmsListener
id (在这种情况下为abc
- 甚至是根据API的自动生成的)< / LI>
答案 0 :(得分:1)
ID属性用于管理容器 - JmsListenerEndpointRegistry
bean有方法:
getListenerContainerIds()
getListenerContainer(String id)
这允许您单独停止/启动容器 - 容器本身未在上下文中注册为bean,因此您无法以这种方式获取对它们的引用。