ActiveMQ非持久交付模式限制?

时间:2017-03-09 05:50:28

标签: performance jms spring-integration activemq consumer

我正在使用ActiveMQ,我需要以下要求

  • 由于我的制作人已经非常快,因此拥有非常快的消费者
  • 需要每秒处理2K消息
  • 在服务器崩溃或其他故障的情况下,不需要再次处理/使用消息。我可以再次触发整个过程。
  • 需要运行非常正常的配置服务器 - 4Gib RAM

我已将ActiveMQ配置为如下所示

问题/疑问

  • 我不确定在non-persistent delivery mode的情况下ActiveMQ如何存储消息,一旦我的队列大小超过某个限制,我的进程是否可能因内存不足错误而失败?我问这个是因为我很难对整个过程进行测试。因此,在触发流程之前,我需要了解限制。
  • 如果non-persistent delivery mode不足以满足我的上述要求,是否有任何性能调优技巧可以通过persistent delivery modetcp://)实现我的要求。我已经用这种模式测试了,但看起来消费者在这里很慢。此外,我已尝试使用DUPS_OK_ACKNOWLEDGEpersistent delivery mode快速消费我的消费者,但没有运气。

注意:我使用的是最新的ActiveMQ版本5.14

1 个答案:

答案 0 :(得分:1)

  

我不确定在非持久传送模式的情况下ActiveMQ如何存储消息

Activemq首先在内存中存储消息,并且还将它交换到磁盘(activemq的数据路径中有一个tmp_storage文件夹)。

  

一旦我的队列大小超过某个限制

,我的进程可能会因内存不足错误而失败

我从未在activemq中遇到内存不足,即使有大约一百万条消息。

您还可以通过生产者流程控制(http://activemq.apache.org/producer-flow-control.html)来确保。 当没有消耗太多消息时,您可以让生产者挂起。

关于持续交付的表现,我也没有好方法。