【发布时间】:2018-03-23 15:31:12
【问题描述】:
我正在使用 Spring Cloud 来使用简单队列服务 (SQS)。我有以下并行处理配置:
@Bean
public SimpleAsyncTaskExecutor simpleAsyncTaskExecutor() {
SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
simpleAsyncTaskExecutor.setConcurrencyLimit(50);
return simpleAsyncTaskExecutor;
}
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(
SimpleAsyncTaskExecutor simpleAsyncTaskExecutor) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setAutoStartup(true);
factory.setTaskExecutor(simpleAsyncTaskExecutor);
factory.setWaitTimeOut(20);
factory.setMaxNumberOfMessages(10);
return factory;
}
我需要在 50 个线程中处理 50 条消息(在 bean SimpleAsyncTaskExecutor 中配置),但只并行处理 10 条消息(从 SQS 返回的 maxNumberOfMessages)
如何处理 50 条消息而不是 10 条消息?
【问题讨论】:
-
那么它是在 50 个线程中(并行)处理 10 条消息,还是总共处理 10 条消息?您已经设置了
SimpleMessageListenerContainerFactory.setMaxNumberOfMessages(10);,所以如果它同时处理 10 条消息乘以 50 个线程,那么将这个数字增加到 50? edit 没关系,我在文档中看到,最大消息公关。请求为 10。如果遇到瓶颈,则需要合并更多线程。 -
在文档中,每个请求返回的最大消息数为 10。因此它在 50 个线程中处理 10 条消息。当 10 条消息的处理结束时,会发出一个新的请求。我想在 SQS 队列中发出 5 个请求,这将导致在 50 个线程中处理 50 条消息。
标签: java spring spring-cloud amazon-sqs