簡體   English   中英

使用 SqsListener 時避免使用 Thread.sleep()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM