我正在使用适用于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;
}
SQS 无法将消息推送到您的端点或调用任何内容。您有责任定期提取消息。因此,您需要将
consumeMessageFromSQS
方法包装到计划工作线程中,该工作线程每 N 秒调用一次并轮询新消息。