gpt4 book ai didi

ActiveMQ KahaDB 持久存储已满

转载 作者:行者123 更新时间:2023-12-04 14:04:47 25 4
gpt4 key购买 nike

我使用带有 KahaDB 的 ActiveMQ 5.4 作为消息存储。
在将消息(持久性为真)发布到具有持久订阅者的主题时,即使消息被分派(dispatch)到订阅者,持久性存储也在增加。因此,由于消息存储已满并且不再接受任何消息,因此这会导致问题。

所以我的问题是为什么 Persistence 存储没有丢弃 KahaDB 中的消息,甚至消息正在发送?

问候,

斯里尼瓦斯

最佳答案

您看到的是 ActiveMQ message store 之间的交互。 durable subscriptions on topics 的行为和.

当您拥有持久订阅时,主题被视为每个订阅者的 clientId 的队列(在 Connection 上设置)。逻辑是客户端在断开连接时不想错过任何消息。因此,如果他们断开连接,持久订阅就会挂起并保持消息处于事件状态。

AMQ 消息存储使用数据日志作为其消息日志。这些是按顺序写入的,并且从未真正从中删除(这将需要随机访问)。还有一个文件用于跟踪哪些消息已被消费。一旦数据文件中的所有消息都被消费完,该文件就会被删除。

所以你看到的是数据文件中的一些消息没有被这些持久订阅消费,只是闲逛。未始终使用的持久订阅者的 ClientId 会导致此问题。如果您使用 JMX 检查代理上的订阅,这可能会帮助您找到根本原因,那么该功能的使用方式可能存在问题。

作为一般规则,每当您认为您可能想要使用持久订阅时,请使用 virtual topics相反——它们更容易推理、检查和负载平衡。另一方面,如果您只想在重新连接主题订阅者时获得最后几条消息,而不是您可能错过的所有消息,请使用 retroactive consumers .

解决此问题的一个简单方法是始终 use a time to live当您发送消息时 - 几乎每个用例都有一个时间限制,即无论如何都应该使用消息。 ActiveMQ 将使超过此时间点的消息过期,并释放数据文件中的消息以供删除。

关于ActiveMQ KahaDB 持久存储已满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318017/

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