【问题标题】:ActiveMQ non-persistent delivery mode limitations?ActiveMQ 非持久交付模式的限制?
【发布时间】:2017-07-29 23:43:00
【问题描述】:

我在需要以下要求的地方使用 ActiveMQ

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

我已经配置了如下所示的 ActiveMQ

问题/疑问

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

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

【问题讨论】:

    标签: performance jms spring-integration activemq consumer


    【解决方案1】:

    我不确定 ActiveMQ 如何在非持久传递模式下存储消息

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

    一旦我的队列大小超过某个限制,我的进程是否可能会因内存不足错误而失败

    我从来没有遇到过activemq内存不足的情况,即使有大约一百万条消息。

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

    关于持久交付的性能,我也没有什么好的方法。

    【讨论】:

    • 感谢您的回复@MallowFox.. 你能解释一下producer-flow。据我了解,它是自动配置的吗?或者我们是否需要在负载过重的情况下降低生产者流量?
    • @Vishal Zanzrukia 您只需要在 activemq 的配置 xml 中设置 memoryUsage 限制和 tempUsage 限制。并且生产者在负载过重时会自动减速。
    猜你喜欢
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2019-09-06
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    相关资源
    最近更新 更多