VerneMQ MQTT连接丢失(8)。AMQJS0008I 插座关闭。

在我的设置中,我把客户的挂载点从监听器设置的挂载点改写为根据客户组设置的单个挂载点。

这背后的想法是对服务器上的多租户进行完美的隔离。因此,来自不同组的单个客户无法看到对方,即使订阅了 "#"(一切)。

在我的auth_on_register webhook中,我正在检查试图注册的客户端是来自网络(作为picockpit用户界面的一部分)还是来自Raspberry Pi客户端。在这一点上,装载点仍然是由监听器决定的,因为它还没有被重写。

在webhook中(在Crystal中)我 设置新的挂载点,像这样。

res = %({"结果":"ok", "modifiers":{"mountpoint":"#{mountpoint}", "client_id":"#{clientid}"})

今天我正在调试为什么JS客户端不能发布任何信息。它在断开连接时出现了错误。

MQTT连接丢失(8)。AMQJS0008I 插座关闭。

下面是我看到的VerneMQ调试输出。

"12:13:33.630 [error] can't auth publish [<>,{"...",<>},0,[<>],<>, false] due to not_authorized"

这让我最初感到困惑。我在检查 "正确的"(javascript客户端)装载点,我想?

而且,我的auth_on_publish的webhook从未被调用?

事实证明。 我忘了考虑新的挂载点已经设置好了。!而这个新的挂载点是 不是 一些虚拟结构,但实际的新挂载点--来自这个客户的任何请求都将携带这个新的挂载点。

因此:请确保在你的Lua函数auth_on_publish(pub)中 你正在检查新的挂载点,然后再传递给下一个处理程序(webhook)。