Планирование JMS-слушателя в SpringBoot - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть метод в приложении Spring Boot, который прослушивает очередь в ActiveMQ. Я хочу запланировать метод так, чтобы он не начинал слушать очередь при запуске приложения и запускался каждые X минут.

Вот метод, который я написал, чтобы выполнить задачу. Я отключил автоматический запуск JMSListener, чтобы он не начинал прослушивание при запуске приложения.

@Scheduled(fixedDelay = 1000, initialDelay = 1000)
@JmsListener(destination = "queueName")
public void receiveMessage(final Message jsonMessage) throws JMSException {
   System.out.println("Received message " + jsonMessage);

}

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
   DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
   factory.setConnectionFactory(connectionFactory());
   factory.setConcurrency("1-1");
   factory.setAutoStartup(false);
   return factory;
}

Но когда я запускаю приложение, я получаю исключение, которое говорит, что у запланированного метода не может быть аргументов:

Encountered invalid @Scheduled method 'receiveMessage': Only no-arg methods may be annotated with @Scheduled

Есть ли способ, которым я могу запланировать JMSListener такчто он запускается после задержки при запуске приложения и должен запускаться каждые X минут и читать сообщения из очереди?

1 Ответ

0 голосов
/ 08 ноября 2019

Вы не можете использовать @Scheduled там.

Используйте компонент JmsListenerEndpointRegistry для запуска и остановки слушателя, когда это необходимо.

@JmsListener(id = "foo" ...)


registry.getListenerContainer("foo").start();
...
registry.getListenerContainer("foo").stop();
...