0
Spring提供@JMSListener
注释以侦听来自特定队列的消息。还有一个替代implement JmsListenerConfigurer
并注册MessageListener
。Spring JMS开始根据请求侦听jms队列
在这两种情况下,在应用程序启动时必须知道队列的名称,无论是通过代码中的硬编码还是通过属性。
有没有一种方法可以在应用程序启动之后的很长时间内侦听其名称已知的队列?
Spring提供@JMSListener
注释以侦听来自特定队列的消息。还有一个替代implement JmsListenerConfigurer
并注册MessageListener
。Spring JMS开始根据请求侦听jms队列
在这两种情况下,在应用程序启动时必须知道队列的名称,无论是通过代码中的硬编码还是通过属性。
有没有一种方法可以在应用程序启动之后的很长时间内侦听其名称已知的队列?
这应该工作。
id
配置@JmsListener
。autoStartup
配置为false。JmsListenerEndpointRegistry
(将注册表自动连接到应用程序并调用getListenerContainer(id)
)中的id
获得对侦听器容器的引用。AbstractMessageListenerContainer
,并用所需的队列呼叫setDestinationName
(或setDestination
)。start()
它。
如果您希望动态创建大量容器,那么只需以编程方式创建容器,调用'afterPropertiesSet()',然后调用'start()'。 –
非常感谢!我会尝试这个并更新。如果碰巧有多个请求队列侦听器,您是否会知道与侦听器对象相比容器有多沉重? – Sundeep
我不确定你的意思;每个'@ JmsListener'运行在由工厂创建的'DefaultMessageListenerContainer'中。它实际上与以编程方式创建容器并将POJO侦听器封装在'MessageListenerAdapter'中相同。 –