MQTT可以在ActiveMQ的主题名称(目标)中使用点/句点

时间:2018-12-12 16:23:02

标签: jms activemq mqtt message-queue jms-topic

我们正在尝试通过ActiveMQ 5.15.8上的MQTT客户端MQTT.fx订阅一个名为message/abc.com/broadcast的主题。但是,ActiveMQ控制台显示已订阅的主题为message.abc/com.broadcast

enter image description here

我们看到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个使用者)并且消息已入队和出队。

enter image description here

如何使MQTT在ActiveMQ的主题名称中使用点/句点?

谢谢

1 个答案:

答案 0 :(得分:0)

您正在混合协议。 ActiveMQ 兼容多种协议,如 MQTT、Stomp 等... 所以ActiveMQ在对方的基础上处理自己的协议。

如果您使用的是 MQTT,则创建主题时使用“/”作为分隔符,“+”代表任何匹配,“#”代表任何后续匹配。

在 Active 中,此通配符更改为“.”对于分隔符,'*' 用于任何匹配,'>' 用于任何后续匹配。 建议尽量避免在任何主题或队列名称中使用所有这些通配符。

所以如果你想订阅“counts/customers”,控制台会显示:“counts.customers”

这将遵循:

MQTT ActiveMQ

  • "counts/customers" "counts.customers"
  • "counts/#" "counts.*"
  • "counts/+/#" "counts.*.>"
  • "counts/+/region" "counts.*.region"