什么时候使用 @JmsListener id 属性有用?
When is useful use the @JmsListener id attribute?
我有一个 Spring 使用 JMS (ActiveMQ) 的应用程序
我有以下内容:
@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());
}
我可以在 ActiveMQ
web console 中确认存在于 Active Subscribers jmsListenerQueueContainerFactoryForSection01
直到现在我都很好。
现在,如果我使用 @JmsListener
的 id 属性,例如:
@JmsListener(destination="springintegration.queue.local.to.section01",
id="abc",
containerFactory="jmsListenerQueueContainerFactoryForSection01")
public void receiveToSection01(Message message){
logger.info("receiveToSection01: {}", message.toString());
}
我从来没有在 ActiveMQ
网络控制台中看到 id
abc。
我总是看到 jmsListenerQueueContainerFactoryForSection01
- 我知道
@JmsListener
concurrency 属性可以覆盖 DefaultJmsListenerContainerFactory
setConcurrency 方法
但不适用于 id
属性。
The unique identifier of the container managing this endpoint.
If none is specified, an auto-generated one is provided.
因此
- 什么时候使用
@JmsListener
id 属性有用?
- 我在哪里可以看到
@JmsListener
id(在这种情况下是 abc
- 甚至是 自动生成的 根据 API)
ID 属性用于管理容器 - JmsListenerEndpointRegistry
bean 有方法:
getListenerContainerIds()
getListenerContainer(String id)
这允许您单独 stop/start 容器 - 容器本身未在上下文中注册为 bean,因此您无法通过这种方式获取对它们的引用。
我有一个 Spring 使用 JMS (ActiveMQ) 的应用程序
我有以下内容:
@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());
}
我可以在 ActiveMQ
web console 中确认存在于 Active Subscribers jmsListenerQueueContainerFactoryForSection01
直到现在我都很好。
现在,如果我使用 @JmsListener
的 id 属性,例如:
@JmsListener(destination="springintegration.queue.local.to.section01",
id="abc",
containerFactory="jmsListenerQueueContainerFactoryForSection01")
public void receiveToSection01(Message message){
logger.info("receiveToSection01: {}", message.toString());
}
我从来没有在 ActiveMQ
网络控制台中看到 id
abc。
我总是看到 jmsListenerQueueContainerFactoryForSection01
- 我知道
@JmsListener
concurrency 属性可以覆盖DefaultJmsListenerContainerFactory
setConcurrency 方法
但不适用于 id
属性。
The unique identifier of the container managing this endpoint. If none is specified, an auto-generated one is provided.
因此
- 什么时候使用
@JmsListener
id 属性有用? - 我在哪里可以看到
@JmsListener
id(在这种情况下是abc
- 甚至是 自动生成的 根据 API)
ID 属性用于管理容器 - JmsListenerEndpointRegistry
bean 有方法:
getListenerContainerIds()
getListenerContainer(String id)
这允许您单独 stop/start 容器 - 容器本身未在上下文中注册为 bean,因此您无法通过这种方式获取对它们的引用。