Spring 始终启用引导 MQ 侦听器

Spring Boot MQ listener enable always

我有 Spring boot 应用程序从 IBM QUEUE 读取消息。我希望我的监听器队列继续监听队列中的新消息,但我看到它读取消息一次然后停止监听。下面是代码,我在这里遗漏了什么吗?

@SpringBootApplication
@EnableJms
public class Application implements CommandLineRunner {

    @Autowired
    private JmsTemplate jmsTemplate;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        System.out.println("******done!!!");
    }


    @Override
    public void run(String... args) throws Exception {
        try {
            System.out.println("jmsTemplate:  " + jmsTemplate);
            final Message message =  jmsTemplate.receive("MYQUEUE");
            String msgBody = ((TextMessage) message).getText();
            System.out.println("message RECEIVED :    " + message);

        } catch (Exception ex) {
            ex.printStackTrace();

        }

        
    }
 
}

为了使用多条消息,您需要多次调用 jmsTemplate.receive()。也许在循环中?

但我建议使用 @JmsListener 这样您甚至不必担心编写自己的轮询机制。

Here is a tutorial on @JmsListener。您真的只需要提供一个 JmsListenerContainerFactory bean,并用 @JmsListener 注释一个方法,每次您订阅的队列收到消息时都会调用该方法。

  @Bean
  public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
                          DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    return factory;
  }
  @JmsListener(destination = "mailbox", containerFactory = "myFactory")
  public void receiveMessage(Email email) {
    System.out.println("Received <" + email + ">");
  }