当前位置: 首页 > 知识库问答 >
问题:

Rabbitmq在处理消息后等待

云隐水
2023-03-14

我有以下兔子听者:

@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
    }
}

我需要将listener配置为在它处理一条消息后等待15分钟,然后再接收下一条消息。不需要在此方法中等待。我所需要的只是在处理完一条后不接收任何消息。可以通过thread.sleep(15000)来完成,但我不确定这是否是实现这一点的最佳方法。对于这种情况有没有rabbitmq的配置?

共有1个答案

章涵蓄
2023-03-14

thread.sleep(15000)将等待15秒,而不是15分钟。

睡15分钟大概不是个好主意;如果您只需要休眠15秒,那么休眠可能是可以的(但是如果您在休眠时服务器崩溃,您确实会冒重新传送的风险)。

对于此用例,您可能需要考虑使用RabbitTemplate.ReceiveAndConvert(),而不是使用消息驱动的体系结构。

 类似资料:
  • 我正在使用Spring AMQP与RabbitMQ一起工作。以下是我的配置: 正如您所看到的,prefetchCount是1000。 我想知道预取的消息是否在消费者中并行处理;也就是说,多个线程调用onMessage(消息消息)方法。或者消息是按顺序处理的;也就是说,一个线程迭代预取的消息,并以连续的方式调用每个消息的onMessage(消息消息消息)方法。 我应该注意到,处理的顺序对我来说并不重

  • 它提供的Swagger UI和rest API规范给了我灵感。 最近,我开始使用消息代理(特别是RabbitMQ),我希望有一些工具来开始开发具有消息和队列规范的面向微服务的系统。 是否有任何工具允许制作这些规范?从代码生成文档还是从模型生成代码? 提前感谢! 更新: 如本文所述。队列,交换,填充,用户和权限可以用RabbitMQ配置文件来描述。 AsyncAPI 看起来是一个很好的解决方案

  • 我为RabbitMQ制作了一个消费者,作为一个用C#.NET编写的控制台应用程序。它被编程为永久监听队列,每当它在队列中发现消息时,它就处理它。使用者平均每秒处理35条消息。使用者被安排在系统启动时在任务计划程序中运行。消费者运行良好的3-4天。但是,它们继续运行,但不处理任何消息,尽管队列中有消息。当使用者停止并再次启动时,它再次开始正确处理消息。但是,当您手动重新启动时,数以百万计的消息排在队

  • 使用Spring AMQP(使用RabbitMQ作为消息代理),我正在准备一个消息,并且我希望我的消息在有时之后被使用。在此之前,它可以在某个队列中等待,比如等待队列,然后移动到我们的主队列,在那里我们有消费者,它正在等待处理来自主队列的消息。 p.s>如果没有rabbitmq_delayed_message_exchange插件也可以。

  • 我对RabbitMQ很陌生,所以如果我的问题听起来很琐碎,请原谅。我想在RabbitMQ上发布消息,它将由RabbitMQ消费者处理。 我的消费者机器是一个多核机器(最好是azure上的工作者角色)。但QueueBasicConsumer一次推送一条消息。我如何编程来利用我可以同时处理多个消息的所有核心。 一种解决方案是在多个线程中打开多个通道,然后在那里处理消息。但在这种情况下,我将如何决定线程

  • 我正在使用NSeriveBus构建一个系统,它应该只在特定的时间段将消息发送给远程处理程序。到目前为止,我设法将所有消息放在一个处理队列上,并从那里检查远程处理程序的可用性,如果处理程序不可用,我就不会通过边界发送消息。要做到这一点,我正在使用 但国家安全局会继续努力。这不像其他侦听器将在几分钟内启动并运行,但它可能有几个小时的停机窗口,因此这并不完全有效。 想知道是否有办法让总线稍后重试消息,或