gpt4 book ai didi

java - ActiveMQ ProducerFlowControl 如何用于异步主题?

转载 作者:行者123 更新时间:2023-11-30 03:41:33 26 4
gpt4 key购买 nike

我们在系统中使用 ActiveMQ 5.3.1 作为独立代理,并且每隔一段时间我们就会收到大量消息(故意的,例如在故障转移时,我们会重新订阅)。我们目前已启用 ProducerFlowControl,因为这似乎是阻止组件在这些峰值期间掉落的明智方法。

但是,我们似乎在流量控制方面遇到了问题 - 一旦它启动,生产者似乎会无限期锁定,即使所有传输中的消息都已被消耗。一旦我们看到消息

Usage Manager memory limit (1048576) reached

我们的生产者无法再向该主题发送任何消息。这看起来很奇怪——我认为这更像是一种“一进一出”的政策。我在某处读到 FlowControl 对于异步主题生成器来说效果不太好(这正是我们所拥有的),所以我想知道是否有更好的方法来配置它?

此外,流量控制启动后会持续多长时间?它会永远限制该主题的生产者(直到 ActiveMQ 重新启​​动吗?直到生产者重新启动?)还是持续固定或可配置的时间(例如,它等待消费者清空主题,然后等待 5 分钟)?

如有任何帮助,我们将不胜感激。我们目前正在研究关闭流量控制并使用基于文件的游标。这种方法有什么明显的缺点吗?

最佳答案

当您达到整个代理或单个目标的大小限制之一(内存、磁盘等)时,就会发生生产者流控制。一旦达到它,该目的地上的生产者(或整个代理,取决于您达到的限制)将无法发送更多消息,直到释放足够的空间来容纳下一条消息。因此,您的一对一心理模型是正确的(尽管如果消息大小不同,那么它可能不是真正的一对一)。只要继续达到限制,这种情况就会持续下去,因为生产者比消费者更快;它不是基于时间的,也不是永远的,直到消费者开始迎头 catch ,并且您不会遇到任何限制。

如果您遇到 PFC,这可能意味着您没有正确调整代理中的某些限制来处理数据突发或消费者离线的时间段(因此您应该停止并执行此操作,而不是关闭 PFC) ,或者你有一个系统性问题,你的生产者总是会超过你的消费者(所以你需要加速你的消费者,减慢你的生产者,找到一种方法允许多个消费者并行消费消息,或者配置代理为您删除一些消息)。

或者这可能意味着您的主题对当前(永久?)离线的消费者有一些剩余的持久订阅,并且代理必须保留这些消息,以便在消费者重新上线时可以传递它们(这可能永远不会)做)。因为代理必须保留这些消息,所以它不能允许发送任何新消息,即使当前在线消费者已经处理了所有消息的副本。这是我根据您所写的内容做出的最佳猜测,尽管它肯定可能是其他东西。

无论如何,PFC 的启动几乎肯定只是您的系统设计方式出现其他问题的次要症状,您应该找出并修复它,而不是仅仅关闭 PFC。 (毕竟,如果您的生产速度永远快于消费速度,那么如果您不再使用 PFC,则将消息写入磁盘只会耗尽磁盘空间。)

最重要的是,5.3.1 已经非常非常了,从那时起到 5.10.0(当前发布的版本)之间已经有了大量改进。我什至不会考虑在 5.5.1 之前的任何版本上运行代理,因为在之前的版本中发现了所有错误,但实际上我不建议在 5.8.0 之前的任何版本上运行,并且必须这是一个不直接升级到 5.10.0 的好理由。如果您遇到了您认为可能存在错误的内容,那么您肯定不会从社区获得任何对 5.3.1 的支持,因此请帮自己一个忙,升级到 2010 年之后发布的版本。(并且希望升级就能解决您所看到的不良行为,但如果没有,您将可以更好地要求某人解决问题。)

关于java - ActiveMQ ProducerFlowControl 如何用于异步主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com