我正在使用带有sqs队列的Spring-jms来发布消息,我试图找到一种方法来停止和启动jms侦听器(@JmsListener),为此,我正在使用“ JmsListenerEndpointRegistry”,该方法可以停止并启动听众。
但是我的问题是启动侦听器之后,我同时从队列中获取了重复的消息。重新启动侦听器之后,将复制从至少10条至少1条消息中从队列中检索10条消息的jms,并在处理10条消息后检索几条相同的消息。
DefaultJmsListenerContainerFactory配置:
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();