【发布时间】:2020-01-07 06:54:52
【问题描述】:
我正在尝试弄清楚如何配置 jms 侦听器以侦听 AWS 队列并在多个线程中处理消息(同时处理约 100 个线程)。
下面是我的配置。
@Configuration
@EnableJms
public class JmsConfig {
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(AmazonSQS amazonSQS) {
ProviderConfiguration providerConfiguration = new ProviderConfiguration().withNumberOfMessagesToPrefetch(0);
SQSConnectionFactory connectionFactory = new SQSConnectionFactory(providerConfiguration, amazonSQS);
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency("30-100");
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setCacheLevel(DefaultMessageListenerContainer.CACHE_CONNECTION);
factory.setErrorHandler(t -> {
});
return factory;
}
}
使用此配置,我不断收到以下错误:
SQSMessageConsumer - 无法终止执行程序服务 ConsumerPrefetch 30秒后,一些正在运行的线程将立即关闭
此外,将消息发布到 AmazonSQS 实例需要 20 秒。
我尝试了 NumberOfMessagesToPrefetch 和 CacheLevel 的不同组合,但没有任何效果。
例如CacheLevel = CACHE_CONSUMER 正常工作,但一次处理 1 条消息。
请帮我配置一下。 谢谢!
图书馆:
aws-java-sdk:1.11.41
spring-jms:5.1.7
amazon-sqs-java-messaging-lib:1.0.6
【问题讨论】:
标签: java spring jms amazon-sqs