gpt4 book ai didi

java - ActiveMQ:如果内存/数据存储已满,则进行故障转移

转载 作者:行者123 更新时间:2023-11-30 04:10:43 24 4
gpt4 key购买 nike

如果其中一个代理实例发生故障,ActiveMQ 中的故障转移传输会很好地工作 - 生产者会自动切换到下一个好的代理实例。

如果代理达到其内存限制(通过 activemq.xml 中的 systemUsage 属性配置),我预计会出现相同的行为。然而在这种情况下,它只是开始在日志中抛出“内存已满”警告,但生产者应用程序中的 jmsTemplate.convertAndSend 方法只是挂起。

我尝试为 systemUsage 属性设置 sendFailIfNoSpace="true" 选项。在这种情况下,生产者应用程序刚刚开始在 convertAndSend 上抛出 org.springframework.jms.ResourceAllocationException:Usage Manager Store is Full 异常,并且无论如何都没有切换到良好的代理实例。

有人可以建议如何在异常和/或“内存已满”情况下进行故障转移吗?

最佳答案

当代理内存不足时,生产者将被阻塞,直到清除一些内存为止。这是在定期使用消息的假设下进行的。

真正应该担心的是队列内存不足的原因。

您生成消息的速度是否比使用消息的速度快?如果是这样,故障转移不会真正帮助您,因为下一个代理将很快耗尽内存。ActiveMQ 支持生产者流量控制,以确保生产者不会压垮代理。 (see here)

消费的消息发生了什么?它们会永久保存吗?如果是这样,请考虑使用 timeToLive 来确保为传入消息腾出空间。

如果由于某种原因,您需要一个又一个地填充队列,您可以在生产者中捕获异常并手动进行故障转移。

另请参阅类似的问题:ActiveMQ: Reject connections from producers when persistent store fills

关于java - ActiveMQ:如果内存/数据存储已满,则进行故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19663812/

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