activemq-artemis - # 通过 MQTT 订阅会导致连接丢失时出现巨大的队列
问题描述
我在两个具有 4 个内核和 16 GB RAM 的 Ubuntu 18.04 VM 上使用 Artemis 2.14 和 Java 14.0.2。我的生产者每秒向大约 5,500 个不同的主题发送大约 2,000 条消息。
当我使用基于证书的授权通过MQTT.FX客户端连接并订阅#
MQTT.FX 客户端时,一段时间后我会在 Web 控制台中看到一个队列,该队列#
带有我的客户端 ID,Artemis 不会清除该队列。这个队列似乎一直在增长,直到 RAM 被 100% 使用。一段时间后,我的 Artemis Broker 会自行重启。
Artemis的这种行为正常吗?我如何告诉 Artemis 在一段时间后清理“僵尸”队列?
我已经尝试以不同的方式使用此配置参数,但没有任何效果:
confirmationWindowSize=0
clientFailureCheckPeriod=30000
consumerWindowSize=0
解决方案
在以下情况下,默认情况下会自动删除自动创建的队列:
- 消费者计数为 0
- 消息计数为 0
这样做是为了不会无意中删除任何消息。
但是,您可以将相应auto-delete-queues-message-count
address-setting
的 inbroker.xml
更改-1
为跳过消息计数检查。此外,如果需要,可以调整auto-delete-queues-delay
以配置延迟。
值得注意的是,如果您创建类似的订阅#
(这是相当危险的),您需要准备好在消息产生后尽快使用它们,以避免消息在队列中累积。如果积累是不可避免的,那么你应该根据你的需要配置max-size-bytes
和address-full-policy
,这样经纪人就不会不知所措。有关详细信息,请参阅文档。
推荐阅读
- java - Java Servlet - 错误 404 未找到所需资源 - 我找不到错误
- javascript - SpeechRecognition 在 Android/Mobile Chrome 上不起作用,但在桌面上起作用?
- c++ - C++ 需要帮助修复以获得所需的输出
- laravel - 如何从 eloquent 调用中访问多个模型数据
- node.js - 无法在我的 Mac 上安装 NVM。不断卷曲:(7)无法连接到服务器
- r - 我怎样才能放弃obs。有条件地到另一个数据框?R
- c - Rules for upconverting/downconverting types
- phoenix-framework - 如何在不破坏现有样式的情况下将 tailwindcss 添加到我的 Phoenix 项目中?
- python - 如何创建一个真正的 Python 程序
- flutter - “flutter on the web”appbar的标题只显示图片,但是浏览器标签很烦