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 + ">");
}
我有 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 + ">");
}