Rabbitmq 在处理消息后等待
Rabbitmq wait after processing message
我有以下兔子听众:
@Slf4j
@Service
@RequiredArgsConstructor
@RabbitListener(queues = "${spring.rabbitmq.template.default-receive-queue}")
public class RabbitmqListener {
private final Processor processor;
@RabbitHandler(isDefault = true)
public void receiveMessage(List<String> someData) {
log.info("Received {} some data", someData.size());
processor.process(someData);
//should wait for 15 minutes here
}
}
我需要将侦听器配置为在处理完一条消息后等待 15 分钟,然后再接收下一条消息。无需在此方法内等待。我所需要的只是在处理一条消息后不接收任何消息。它可以由 Thread.sleep(15000)
完成,但我不确定这是实现此目标的最佳方法。 rabbitmq有针对这种情况的配置吗?
Thread.sleep(15000)
将等待 15 秒,而不是 15 分钟。
睡 15 分钟可能不是个好主意;如果你只需要睡 15 秒,睡一觉可能就可以了(但如果你在睡觉时服务器崩溃,你确实有重新投递的风险)。
对于此用例,您可能需要考虑使用 RabbitTemplate.receiveAndConvert()
,而不是使用消息驱动的架构。
我有以下兔子听众:
@Slf4j
@Service
@RequiredArgsConstructor
@RabbitListener(queues = "${spring.rabbitmq.template.default-receive-queue}")
public class RabbitmqListener {
private final Processor processor;
@RabbitHandler(isDefault = true)
public void receiveMessage(List<String> someData) {
log.info("Received {} some data", someData.size());
processor.process(someData);
//should wait for 15 minutes here
}
}
我需要将侦听器配置为在处理完一条消息后等待 15 分钟,然后再接收下一条消息。无需在此方法内等待。我所需要的只是在处理一条消息后不接收任何消息。它可以由 Thread.sleep(15000)
完成,但我不确定这是实现此目标的最佳方法。 rabbitmq有针对这种情况的配置吗?
Thread.sleep(15000)
将等待 15 秒,而不是 15 分钟。
睡 15 分钟可能不是个好主意;如果你只需要睡 15 秒,睡一觉可能就可以了(但如果你在睡觉时服务器崩溃,你确实有重新投递的风险)。
对于此用例,您可能需要考虑使用 RabbitTemplate.receiveAndConvert()
,而不是使用消息驱动的架构。