我的Java SQS Consumer仅在我调用它而不是单独调用时才进行消费

问题描述 投票:0回答:1

我正在使用适用于java的aws sdk,特别是sdk版本2.21.0,但是我的情况如下,我正在为AWS SQS中的队列开发消费者,消费者工作正常,它带来了消息和所有内容,但仅当我调用该方法时,也就是说,不是在发布消息时,而是仅在调用它时它才会处理消息,我不希望出现这种行为,因为我想在消息发布后自行处理消息,我想要知道会发生什么

AmazonSQSAsync bean:

@Bean
    @Primary
    public AmazonSQSAsync amazonSQSAsync() {
        BasicAWSCredentials credentials = new BasicAWSCredentials(Enviromentals.KeyProvider.ACCESS_KEY,
                Enviromentals.KeyProvider.SECRET_KEY);
        return AmazonSQSAsyncClientBuilder
                .standard()
                .withRegion(Regions.US_EAST_1)
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .build();
    }

消费者方法:

public List<Message> consumeMessageFromSQS() {
    AmazonSQS sqsClient = sqsClientBuilder();
    System.out.println("al escuchar entro a este metodo");
    //ReceiveMessageRequest request = new ReceiveMessageRequest(Enviromentals.AwsEnvs.DEPOSIT_QUEUE_ENDPOINT_URI).withMaxNumberOfMessages(10);

    List<Message> sqsMessages = sqsClient.receiveMessage(Enviromentals.AwsEnvs.DEPOSIT_QUEUE_ENDPOINT_URI).getMessages();
    for (Message message : sqsMessages) {
        //run process for message
        System.out.println(message.getBody());
        
        //dequeue message after using it
        //also perfect step so check if message was successfully processed
        dequeuMessageFromSQS(message);
    }
    return sqsMessages;
}
java amazon-sqs
1个回答
0
投票

SQS 无法将消息推送到您的端点或调用任何内容。您有责任定期提取消息。因此,您需要将

consumeMessageFromSQS
方法包装到计划工作线程中,该工作线程每 N 秒调用一次并轮询新消息。

© www.soinside.com 2019 - 2024. All rights reserved.