Запуск и остановка @JmsListener программно вызывает дублирование сообщений - PullRequest
0 голосов
/ 26 апреля 2019

Я использую Spring-jms с очередью sqs для отправки сообщений, я пытаюсь найти способ остановить и запустить прослушиватель jms (@JmsListener), для этой цели я использую 'JmsListenerEndpointRegistry', который останавливается и запускаетсяслушатель.

Но моя проблема в том, что после запуска прослушивателя я получаю дублирующиеся сообщения из очереди одновременно.После запуска прослушивателя jms, извлекающий 10 сообщений из очереди из 10, по крайней мере, 1 сообщение, дублируется, а после обработки 10 сообщений извлекает пару одинаковых сообщений.

DefaultJmsListenerContainerFactory configuration:

DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConcurrency("10-20");
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setConnectionFactory(this.connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());

Код для отключения @ JmsListener

@JmsListener(id = "testListener", destination = "test-queue")
@Autowired
private JmsListenerEndpointRegistry _listener;
_listener.getListenerContainer("testListener").stop(); 
OR
_listener.stop();

Для запуска прослушивателя:

_listener.getListenerContainer("testListener").start();
...