在消费者缓慢的情况下如何阻止生产者

时间:2017-04-20 18:41:19

标签: jms activemq

我从ActiveMQ文档here中读到了以下引用:

  

使用同步消息传递的缺点是   如果他的消费者很慢,生产者更有可能阻止   正在调度消息。

但我不明白生产者通常会因为消费者的速度慢而被阻止,因为我的理解是JMS客户端(生产者)会将消息发送到ActiveMQ实例(代理)的队列中,就是这样,现在生产者是免费的,换句话说,发送消息的生产者线程可以自由地完成/消亡。然后会有一些其他JMS客户端(消费者)监听该队列,现在一旦消息到达代理,代理就会将其发送给收听的消费者。

现在,在所有这些生产者依赖消费者的地方?

1 个答案:

答案 0 :(得分:4)

当生产者向代理发送持久性消息时,代理必须将该消息写入磁盘,然后再向生产者发回确认信息,让它知道它的消息是安全存储的,以便以后发送给消费者。在消费者较慢的情况下,生产者可能最终遇到代理已达到资源限制并且无法将该消息存储在内存中或磁盘上的队列中的情况,这一切都取决于代理的配置。

生产者与消费者的联系并不像消费者所需的资源,而是消费者所需要的资源。