我们正在尝试通过ActiveMQ 5.15.8上的MQTT客户端MQTT.fx订阅一个名为message/abc.com/broadcast
的主题。但是,ActiveMQ控制台显示已订阅的主题为message.abc/com.broadcast
。
我们看到MQTT斜杠分隔符将转换为ActiveMQ中的点。但是,为什么ActiveMQ也将点转换为斜线呢?我们希望订阅和发布的主题为message.abc.com.broadcast
。
我们尝试了如下ActiveMQ的destinationPathSeparatorPlugin。
<plugins>
<destinationPathSeparatorPlugin pathSeparator="/" />
</plugins>
启用此插件后,message/abc.com/broadcast
的订阅将变为message.abc.com.broadcast
,如ActiveMQ控制台上所示。但是,当我们向message/abc.com/broadcast,
发布消息时,下标将不会收到任何消息。从控制台中,我们可以看到使用者在那(1个使用者)并且消息已入队和出队。
如何使MQTT在ActiveMQ的主题名称中使用点/句点?
谢谢
答案 0 :(得分:0)
您正在混合协议。 ActiveMQ 兼容多种协议,如 MQTT、Stomp 等... 所以ActiveMQ在对方的基础上处理自己的协议。
如果您使用的是 MQTT,则创建主题时使用“/”作为分隔符,“+”代表任何匹配,“#”代表任何后续匹配。
在 Active 中,此通配符更改为“.”对于分隔符,'*' 用于任何匹配,'>' 用于任何后续匹配。 建议尽量避免在任何主题或队列名称中使用所有这些通配符。
所以如果你想订阅“counts/customers”,控制台会显示:“counts.customers”
这将遵循: