SQSMessageConsumerPrefetch

我有一个SpringBoot应用程序,它在预处理后将消息发送到3个单独的SQS队列,并同时使用它们以根据队列分别进行进一步处理。

我们会定期收到此错误,最终导致应用程序失败。

2020-01-07 19:44:32.484 [ConsumerPrefetchThread-1] ERROR c.a.s.j.SQSMessageConsumerPrefetch - Unexpected exception when prefetch messages: java.lang.OutOfMemoryError: Java heap space

这就是全部信息。

我们已将队列侦听器的数量配置为5;我们有3个队列;在分析过程中,我看到创建了7个ConsumerPrefetchThread。这是预期的吗?

从SQS甚至一般的角度来看, 是什么原因导致OOM错误? 我愿意接受任何理论!

build.gradle中的相关依赖项:

  • org.springframework:spring-jms:5.1.1.RELEASE
  • com.amazonaws:aws-java-sdk-sqs:1.11.428
  • com.amazonaws:amazon-sqs-java-messaging-lib:1.0.4

SQSConfiguration.java中的代码段

@Bean
public SQSConnectionFactory sqsConnectionFactory() {
    try {
        AmazonSQSClientBuilder.defaultClient()
                .getQueueUrl({This is the queue url});
    }
    catch (Exception ex) {
        throw new ApplicationLoadingException(
                "SQS settings error: " + ex.getStackTrace());
    }
    return new SQSConnectionFactory(new ProviderConfiguration(),AmazonSQSClientBuilder.defaultClient());
}

@Bean
public JmsTemplate jmsTemplate() {
    JmsTemplate template = new JmsTemplate();
    template.setConnectionFactory(sqsConnectionFactory());
    return template;
}

这是SQSClient.java的代码片段

@PostConstruct
public void init() {
    sqsClient = AmazonSQSClientBuilder.defaultClient();
}

@Retryable(value = {
        SdkClientException.class },maxAttempts = 3,backoff = @Backoff(delay = 30000))
public void sendMessage(String queue,String message,int delayInminutes) {
    SendMessageRequest request = new SendMessageRequest(
            sqsClient.getQueueUrl(queue).getQueueUrl(),message);
    request.withDelaySeconds(delayInminutes * 60);
    sqsClient.sendMessage(request);
}
MMLQY 回答:SQSMessageConsumerPrefetch

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2804540.html

大家都在问