【发布时间】:2022-02-04 13:16:53
【问题描述】:
我有 SQS 监听器,在某种情况下,我需要等待 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 multithreading amazon-sqs