@JmsListener的启动和停止以编程方式导致消息重复

时间:2019-04-26 16:45:13

标签: spring-jms

我正在使用带有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();

0 个答案:

没有答案