Java 在侦听SQS队列时,org.springframework.core.task.TaskRejectedException?
我使用Java 在侦听SQS队列时,org.springframework.core.task.TaskRejectedException?,java,spring,multithreading,spring-boot,spring-cloud-aws,Java,Spring,Multithreading,Spring Boot,Spring Cloud Aws,我使用@SqsListener创建了一个从SQS消费消息的基本工作流。它工作正常,但我经常收到大量类似的信息: org.springframework.core.task.TaskRejectedException:执行者 [java.util.concurrent]。ThreadPoolExecutor@372b568[跑步,游泳池大小]= 3,活动线程=3,排队任务=0,已完成任务=0]]未执行 接受任务: org.springframework.cloud.aws.messaging.li
@SqsListener
创建了一个从SQS
消费消息的基本工作流。它工作正常,但我经常收到大量类似的信息:
org.springframework.core.task.TaskRejectedException:执行者
[java.util.concurrent]。ThreadPoolExecutor@372b568[跑步,游泳池大小]=
3,活动线程=3,排队任务=0,已完成任务=0]]未执行
接受任务:
org.springframework.cloud.aws.messaging.listener.SimpleMessageListener.SimpleMessageListenerContainer$SignalExecutingRunnable@4c30c2f9
在
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:317)
~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]at
org.springframework.cloud.aws.messaging.listener.SimpleMessageListener$AsynchronousMessageListener.run(SimpleMessageListenerContainer.java:286)
~[spring-cloud-aws-messaging-2.1.0.RELEASE.jar:2.1.0.RELEASE]
Executors$RunnableAdapter.call(Executors.java:511)
[na:1.8.0_171]at
java.util.concurrent.FutureTask.run(FutureTask.java:266)
[na:1.8.0_171]at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[na:1.8.0_171]at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[na:1.8.0_171]位于java.lang.Thread.run(Thread.java:748)
[na:1.8.0_171]由以下原因引起:
java.util.concurrent.RejectedExecutionException:任务
org.springframework.cloud.aws.messaging.listener.SimpleMessageListener.SimpleMessageListenerContainer$SignalExecutingRunnable@4c30c2f9
已从java.util.concurrent中拒绝。ThreadPoolExecutor@372b568[跑步,
池大小=3,活动线程=3,排队任务=0,已完成任务=
0]at
java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
~(na:1.8.0_171)at
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
[na:1.8.0_171]at
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
[na:1.8.0_171]at
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:314)
~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]。。。6通用框架
省略
我的配置bean:
@EnableSqs
@Configuration
public class AmazonSqsConfiguration {
@Value("${aws.sqs.accessKey}")
private String accessKey;
@Value("${aws.sqs.secretKey}")
private String secretKey;
@Value("${aws.sqs.region}")
private String region;
@Value("${aws.sqs.url}")
private String url;
@Bean
public AmazonSQSAsync amazonSqs() {
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
return AmazonSQSAsyncClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(url, region))
.withCredentials(credentialsProvider)
.build();
}
}
我的消费者如下:
@SqsListener(value = "my-queue", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void processSubscription(String xmlNotification) {/* Message processor */}
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSQS) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setAmazonSqs(amazonSQS);
factory.setMaxNumberOfMessages(10);
factory.setAutoStartup(true);
factory.setWaitTimeOut(20);
return factory;
}
是否可以通过重新配置@Bean
来删除它们?问题的根源是什么?如何应对
我试图通过自然搜索找到解决方案,但遇到了问题。它不适合我,因为我没有JMS
。我无法调试,因为我甚至不知道要调试什么。我找到了与我遇到的行为相关的罚单。我也觉得相关
因此,对我有效的解决方案如下:
@SqsListener(value = "my-queue", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void processSubscription(String xmlNotification) {/* Message processor */}
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSQS) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setAmazonSqs(amazonSQS);
factory.setMaxNumberOfMessages(10);
factory.setAutoStartup(true);
factory.setWaitTimeOut(20);
return factory;
}