我正在使用amazon-sqs-java-messaging-lib
和@JmsListener
阅读SQS队列。
我的配置如下:
@Configuration
@EnableJms
public class JmsConfig {
@Bean
public SQSConnectionFactory connectionFactory(AmazonSQS amazonSQS) {
return new SQSConnectionFactory(new ProviderConfiguration(), amazonSQS);
}
@Bean
public JmsTemplate jmsTemplate(SQSConnectionFactory connectionFactory) {
return new JmsTemplate(connectionFactory);
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(SQSConnectionFactory connectionFactory,
MessageConverter converter) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setMaxMessagesPerTask(1);
factory.setConnectionFactory(connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency("1");
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setMessageConverter(converter);
return factory;
}
}
这里我的意思是我想严格逐个处理邮件。
当我的队列包含多条消息并且应用程序启动时,我正在处理用例。
当应用程序连接到队列时,它在一开始就会收到2条消息。之后它会逐个消耗,但在飞行中的消息数总是2。
(我试图调试,看起来像SQSMessageConsumerPrefetch错过了它的第一次阅读)
这是我的错误配置还是真正的问题? 谢谢