当前位置: 首页 > 知识库问答 >
问题:

ActiveMQ:如果内存/数据存储已满,则进行故障切换

澹台鸿光
2023-03-14

如果一个代理实例出现故障,ActiveMQ中的故障转移传输工作得很好——生产者自动切换到下一个代理实例。

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

我试图为systemUsage属性设置sendFailIfNoSpace选项。在本例中,生产者应用程序刚刚开始抛出组织。springframework。jms。ResourceAllocationException:convertAndSend上的Usage Manager存储已满,出现异常,但未切换到良好的broker实例。

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

共有1个答案

司寇嘉茂
2023-03-14

当代理的内存不足时,生产者将被阻止,直到一些内存被清除。这是基于这样的假设,即消息是定期使用的。

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

您是否比使用消息更快地生成消息?如果是这样,故障切换将不会真正帮助您,因为下一个代理将很快耗尽内存。ActiveMQ支持生产者流控制,以确保生产者不会压倒代理。(参见此处)

被消费的消息发生了什么变化?它们是否永久保存?如果是这样,请考虑使用timeToLive,以确保为传入消息留出空间。

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

另请参见类似的问题:ActiveMQ:在持久存储区填充时拒绝来自生产者的连接

 类似资料:
  • 我想结合内存和磁盘缓存使用EhCache。当内存已满时,EhCache应将新元素移动到磁盘。e、 g.我在ehCache内存存储中有100个元素,并尝试放入第101个元素,如果内存已满,则将第101个单元放入磁盘,而不是第一个单元。 你能让我知道实现这一点的缓存配置吗?

  • 我有一个问题:伊甸园100%使用,旧的100%使用,从空间100%使用,但没有垃圾收集触发,没有oom -xmx2g-xms2g-xmn1g-xx:survivorratio=8-xx:permsize=256m-xx:maxpermsize=256m-xx:+heapdumponoutofmemoryerror-xx:reservedcodecachesize=128m-xx:initialco

  • 问题内容: 如果数据超出可用内存,Redis数据存储将如何处理? 问题答案: 我认为redisconfig中有一个商店大小设置,它将阻止您添加超出已设置商店容纳的数据的数据。如果您设置了一个不适合物理内存的存储,它只会向操作系统请求更多的内存,并且其中一些将被分页到磁盘上,这会明显提高性能。 下一个版本的Redis具有自己的虚拟内存实现,可以在磁盘上存储较少使用的密钥-http: //antire

  • 主要内容:程序员的幽默计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。 要想学习编程,就必须了解二进制,它是计算机处理数据的基础。 内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。

  • 我有一个依赖于redux存储的组件。我的redux商店看起来像这样 所以基本上,当我刷新页面时,存储区消失了,需要一些时间来获取数据并将其设置为存储区,如上所述 我有一个组件,它需要company_id来获取有关该公司的数据 使用react-redux我得到了company_id 此组件,componentDidMount在存储区接收公司id数据之前被激发。所以我想要的是在这个组件从redux商店

  • 我想知道是否可以在Kafka制作程序中配置2个不同的Kafka集群。 目前我正试图让我的制片人 我正在使用Apache Kafka 2.8和Python 3.7的confluent_kafka==1.8.2包。 生产商代码下方: 当我杀死clusterB时,我得到了以下错误消息。