【问题标题】:Consume message from queue after service complete the processing of previous message服务完成对上一条消息的处理后,从队列中消费消息
【发布时间】:2020-01-20 21:17:05
【问题描述】:

我正在做一个 POC 来使用 RabbitMQ,并且对如何有条件地监听队列有疑问!

我们正在消费来自队列的消息,一旦消费,消息将参与上传过程,根据文件大小,该过程需要更长的时间。并且随着文件的大小变大,有时我们调用的外部服务会耗尽内存,如果多条消息被消费并且上传过程正在继续之前的消息。

也就是说,我们只想在当前/上一条消息被完全处理后才使用队列中的下一条消息。我是 JMS 新手,想知道该怎么做。

我目前的想法是,当代码流完成上一条消息的处理时,代码流将手动从队列中拉出下一条消息,因为流知道它已经完成了处理,但是如果该侦听器仅在代码流中使用手动调用,它将如何提取第一条消息!

【问题讨论】:

  • 您需要提供有关您的代码的详细信息、您尝试解决问题的方法以及到目前为止没有奏效的原因。在这一点上,这个问题太模糊了。

标签: rabbitmq jms message-queue spring-jms


【解决方案1】:

JMS spec 表示消息消费者按顺序工作:

用于创建消息消费者的会话序列化 执行在会话中注册的所有消息侦听器

如果您创建一个MessageListener 并将其用于您的消费者,JMS 规范规定侦听器的onMessage 将按顺序调用,即在侦听器处理完每条消息后每条消息调用一次。因此,实际上每条消息都在等待上一条消息完成。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2015-12-16
    • 2013-06-09
    • 2016-06-02
    • 2015-06-18
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多