使用Spring提供的异步处理来代替Thread.sleep()。
在实现SqsListener接口的类中,可以使用@Async注解来表明接收到消息时需要异步处理。具体代码示例如下:
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.AmazonSQSAsync;
@Component
public class MySqsListener implements SqsListener {
private final AmazonSQSAsync amazonSQSAsync;
public MySqsListener(AmazonSQSAsync amazonSQSAsync) {
this.amazonSQSAsync = amazonSQSAsync;
}
@Async
@Override
public void onMessage(Message message, SqsMessageVisibility visibility) {
// do some asynchronous processing with the message
// once you have processed the message, delete it from the queue
amazonSQSAsync.deleteMessageAsync(visibility.getVisibilityId(), visibility.getQueueUrl());
}
}
使用@Async注解可以让onMessage()方法在接收到消息时异步执行,不会阻塞主线程。处理完成后,使用AmazonSQSAsync对象异步删除消息,避免了使用Thread.sleep()方法的需要。