首页 > 解决方案 > Amazon SQS 队列轮询 Spring Boot

问题描述

所以我是 Amazon SQS 的新手,我看了一些教程,提到队列中的消息不会被删除,它们会保留在队列中(保留期由我们设置),存在可见性超时,如果一个消费者是消费该消息的其他消费者将不得不等到可见性超时结束。在可见性超时结束后,其他消费者可以访问该消息。

现在在另一个教程中,一个人使用 SQSListner 消费了消息,它是一个 spring boot 应用程序,消费后,消息自动从队列中删除,这是怎么回事?

@SqsListener("javatechie-queue")
 public void loadMessageFromSQS(String message)  {
        logger.info("message from SQS Queue {}",message);
    }

标签: javaspringamazon-web-servicesspring-bootamazon-sqs

解决方案


是一个spring boot app,消费完后,消息自动从队列中删除。这是怎么发生的?

Amazon SQS Java V2 API 还提供了一种方法,可让您使用 Java 逻辑从队列中清除消息,如下所示:

       public void purgeMyQueue() {
       
               SqsClient sqsClient = getClient();
       
               GetQueueUrlRequest getQueueRequest = GetQueueUrlRequest.builder()
                       .queueName(QUEUE_NAME)
                       .build();
       
               PurgeQueueRequest queueRequest = PurgeQueueRequest.builder()
                       .queueUrl(sqsClient.getQueueUrl(getQueueRequest).queueUrl())
                       .build();
       
               sqsClient.purgeQueue(queueRequest);
               }

因此,您可以使用此逻辑清除应用程序中的队列。如果您想了解如何在 Spring Boot 应用程序中使用 Amazon SQS Java API,请参阅此 AWS 教程:

使用适用于 Java 的 AWS 开发工具包创建示例消息传递应用程序


推荐阅读