HiveMQ 持久性如何工作?

How does HiveMQ Persistence work?

HiveMQ 为持久化特性提供了哪些选项?默认是基于文件的吗?如果需要,我们可以将其更改为数据库吗?

我试图在网上找到一些东西,但我所能想到的就是这个 MQTT-SQL-Database Plugin,它使用 MySQL 数据库在消息到达时存储它们。我想将用户订阅、统计数据和任何其他数据等所有内容保存到数据库中。目前,如果我重新启动代理,所有数据都会丢失。

免责声明:我在 HiveMQ 背后的公司工作

HiveMQ 1.x 和 2.x 默认使用基于文件的持久性(文件驻留在 data 文件夹中)。这对于大多数用例都非常有效。您可以将持久性更改为例如带有 infinispan.xml 文件的数据库,不推荐这样做,尽管 。这些数据实际上是供 HiveMQ 内部使用的,不得在外部修改。

另请注意,统计数据是短暂的,不会持久保存,因此重启后无法保存。如果客户端连接到持久会话,则用户订阅在重新启动后仍然存在。

我相信解决您的用例(保留所有数据,如统计信息、订阅等)的最佳方法是使用功能强大的 HiveMQ plugin system. You can use the Services for getting data about subscriptions, clients, retained messages, ... anytime you want. Another approach would be to use the Callbacks provided by HiveMQ。您几乎可以拦截代理的每个方面(例如更新统计信息、有人订阅、客户端断开连接等)。

如果您更愿意直接深入研究代码,请查看此示例 hello-world project on Github which uses quite a few callbacks and services. It's really easy to get started. If you want to see how to integrate database connection pools, check out this example project

询问 HiveMQ 相关问题的最佳方式是使用 HiveMQ support forum,所以如果您有更深入的问题,请查看此内容。