[英]Avoiding using Thread.sleep() when working with SqsListener
我有SQS listener,在某種情況下,我需要等待120秒才能執行method1()。 但據我所知,SQS 偵聽器是多線程工作的。 有沒有辦法避免使用 Thread.sleep() 來重用線程而不是讓它等待? 這是偵聽器代碼:
@SqsListener(value = "${test}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void listenTransactionEvent(@Payload SQSEvent sqsEvent) {
String sqsPlainMessage = sqsEvent.getMessage();
if (sqsPlainMessage.equals("test")) {
Thread.sleep(120 * 1000L);
method1();
} else {
method2();
}
}
和配置:
@Bean
public QueueMessageHandlerFactory queueMessageHandlerFactory(
final ObjectMapper mapper,
final AmazonSQSAsync amazonSQSAsync
) {
final QueueMessageHandlerFactory queueHandlerFactory = new QueueMessageHandlerFactory();
queueHandlerFactory.setAmazonSqs(amazonSQSAsync);
queueHandlerFactory.setArgumentResolvers(Collections.singletonList(
new PayloadMethodArgumentResolver(jackson2MessageConverter(mapper))
));
return queueHandlerFactory;
}
我相信您可能正在尋找java.util.Timer來安排TimeTask或者甚至使用java.util.concurrent.Future可以釋放調用 listenTransactionEvent 的線程,但等待只會改變位置,有時取決於上下文 Thread.sleep 可能成為可接受的解決方案。
最好的祝福。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.