Spring JMS 根据请求开始监听 jms 队列

Spring JMS start listening to jms queues on request

Spring 提供 @JMSListener 注释以侦听来自特定队列的消息。还有一个 implement JmsListenerConfigurer 的替代方法,注册一个 MessageListener.

在这两种情况下,队列的名称必须在应用程序启动时已知,可以通过在代码中进行硬编码或通过属性。

有没有办法在应用程序启动后很久才知道其名称的队列?

这应该有效。

  1. 使用虚拟队列名称和 id 配置 @JmsListener
  2. listener container factory 配置为 autoStartup false。
  3. 准备就绪后,使用 JmsListenerEndpointRegistry 中的 id 获取对侦听器容器的引用(将注册表自动连接到您的应用程序并调用 getListenerContainer(id))。
  4. 将容器投射到 AbstractMessageListenerContainer 并使用所需的队列调用 setDestinationName(或 setDestination)。
  5. start()吧。