【问题标题】:How to persist retained message between activemq broker restart?如何在 activemq 代理重启之间保留保留的消息?
【发布时间】:2021-12-05 23:22:28
【问题描述】:

我有一个状态主题,通过 ActiveMQ (docker rmohr/activemq:5.15.9) 使用 QoS 1 和保留消息 = true 发布。我希望我的仪表板能够延迟订阅主题并始终收到最后发布的消息。

保留的功能似乎运行良好,但消息似乎在 ActiveMQ 代理重新启动时被清除。

如果我停止发布到主题,重新启动代理,并尝试延迟订阅,我不会收到最后一条消息(在代理重新启动之前保留的消息)。

我使用默认容器配置(为 data/ 和 conf/ 安装的 kahadb 和文件系统目录)。我以为保留的消息会在 kahadb 中,但它是空的。在代理重新启动后,ActiveMQ ui 还会显示主题的空队列。

这是预期的行为?我可以通过使用 ActiveMQ 重新启​​动代理来实现保留消息的持久性吗?我应该如何进行?

【问题讨论】:

  • 看起来这是一个known issue,似乎有一个fix,但如果我没看错,它只适用于v5.16+。
  • 我刚刚使用 5.16.3 进行了测试,现在我们可以在 kahadb 中看到这些消息。但是它们仍然不会在代理重新启动时发送给迟到的订阅者。有什么想法吗?
  • 我们能够通过切换到 RabbitMQ 来解决我们的问题。

标签: activemq mqtt kahadb


【解决方案1】:

在任何情况下都不应丢失保留消息,除非客户端发布空保留消息

你可以切换到 EMQ x 来避免这个问题。您可以将数据存储在磁盘或您喜欢的数据库中

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多